1 //=================================================================================================
2 /*!
3 //  \file src/mathtest/traits/rowtrait/ClassTest.cpp
4 //  \brief Source file for the RowTrait class test
5 //
6 //  Copyright (C) 2012-2020 Klaus Iglberger - All Rights Reserved
7 //
8 //  This file is part of the Blaze library. You can redistribute it and/or modify it under
9 //  the terms of the New (Revised) BSD License. Redistribution and use in source and binary
10 //  forms, with or without modification, are permitted provided that the following conditions
11 //  are met:
12 //
13 //  1. Redistributions of source code must retain the above copyright notice, this list of
14 //     conditions and the following disclaimer.
15 //  2. Redistributions in binary form must reproduce the above copyright notice, this list
16 //     of conditions and the following disclaimer in the documentation and/or other materials
17 //     provided with the distribution.
18 //  3. Neither the names of the Blaze development group nor the names of its contributors
19 //     may be used to endorse or promote products derived from this software without specific
20 //     prior written permission.
21 //
22 //  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
23 //  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 //  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
25 //  SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 //  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27 //  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
28 //  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 //  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 //  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
31 //  DAMAGE.
32 */
33 //=================================================================================================
34 
35 
36 //*************************************************************************************************
37 // Includes
38 //*************************************************************************************************
39 
40 #include <cstdlib>
41 #include <iostream>
42 #include <utility>
43 #include <blaze/math/CompressedMatrix.h>
44 #include <blaze/math/CustomMatrix.h>
45 #include <blaze/math/DiagonalMatrix.h>
46 #include <blaze/math/DynamicMatrix.h>
47 #include <blaze/math/HermitianMatrix.h>
48 #include <blaze/math/HybridMatrix.h>
49 #include <blaze/math/InitializerMatrix.h>
50 #include <blaze/math/LowerMatrix.h>
51 #include <blaze/math/StaticMatrix.h>
52 #include <blaze/math/StrictlyLowerMatrix.h>
53 #include <blaze/math/StrictlyUpperMatrix.h>
54 #include <blaze/math/SymmetricMatrix.h>
55 #include <blaze/math/traits/RowTrait.h>
56 #include <blaze/math/typetraits/TransposeFlag.h>
57 #include <blaze/math/UniformMatrix.h>
58 #include <blaze/math/UniLowerMatrix.h>
59 #include <blaze/math/UniUpperMatrix.h>
60 #include <blaze/math/UpperMatrix.h>
61 #include <blaze/math/Views.h>
62 #include <blaze/math/ZeroMatrix.h>
63 #include <blaze/util/typetraits/IsSame.h>
64 #include <blaze/util/typetraits/RemoveCVRef.h>
65 #include <blazetest/mathtest/traits/rowtrait/ClassTest.h>
66 
67 
68 namespace blazetest {
69 
70 namespace mathtest {
71 
72 namespace traits {
73 
74 namespace rowtrait {
75 
76 //=================================================================================================
77 //
78 //  CONSTRUCTORS
79 //
80 //=================================================================================================
81 
82 //*************************************************************************************************
83 /*!\brief Constructor for the RowTrait class test.
84 //
85 // \exception std::runtime_error Error detected.
86 */
ClassTest()87 ClassTest::ClassTest()
88 {
89    testRowOperation();
90 }
91 //*************************************************************************************************
92 
93 
94 
95 
96 //=================================================================================================
97 //
98 //  TEST FUNCTIONS
99 //
100 //=================================================================================================
101 
102 //*************************************************************************************************
103 /*!\brief Test of the 'RowTrait' class template for row operations.
104 //
105 // \return void
106 // \exception std::runtime_error Error detected.
107 //
108 // This function performs a compile time test of the 'RowTrait' class template for row
109 // operations. In case an error is detected, a compilation error is created.
110 */
testRowOperation()111 void ClassTest::testRowOperation()
112 {
113    using namespace blaze;
114 
115 
116    // StaticMatrix
117    {
118       {
119          using MT = StaticMatrix<int,3UL,5UL,rowMajor>;
120          using RT = StaticVector<int,5UL,rowVector>;
121          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
122 
123          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
124          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
125          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
126       }
127       {
128          using MT = StaticMatrix<int,3UL,5UL,columnMajor>;
129          using RT = StaticVector<int,5UL,rowVector>;
130          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
131 
132          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
133          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
134          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
135       }
136       {
137          using MT = StaticMatrix<int,3UL,5UL,rowMajor>;
138          using RT = StaticVector<int,5UL,rowVector>;
139          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
140 
141          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
142          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
143          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
144       }
145       {
146          using MT = StaticMatrix<int,3UL,5UL,columnMajor>;
147          using RT = StaticVector<int,5UL,rowVector>;
148          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
149 
150          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
151          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
152          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
153       }
154    }
155 
156    // HybridMatrix
157    {
158       {
159          using MT = HybridMatrix<int,3UL,5UL,rowMajor>;
160          using RT = HybridVector<int,5UL,rowVector>;
161          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
162 
163          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
164          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
165          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
166       }
167       {
168          using MT = HybridMatrix<int,3UL,5UL,columnMajor>;
169          using RT = HybridVector<int,5UL,rowVector>;
170          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
171 
172          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
173          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
174          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
175       }
176       {
177          using MT = HybridMatrix<int,3UL,5UL,rowMajor>;
178          using RT = HybridVector<int,5UL,rowVector>;
179          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
180 
181          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
182          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
183          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
184       }
185       {
186          using MT = HybridMatrix<int,3UL,5UL,columnMajor>;
187          using RT = HybridVector<int,5UL,rowVector>;
188          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
189 
190          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
191          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
192          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
193       }
194    }
195 
196    // DynamicMatrix
197    {
198       {
199          using MT = DynamicMatrix<int,rowMajor>;
200          using RT = DynamicVector<int,rowVector>;
201          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
202 
203          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
204          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
205          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
206       }
207       {
208          using MT = DynamicMatrix<int,columnMajor>;
209          using RT = DynamicVector<int,rowVector>;
210          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
211 
212          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
213          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
214          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
215       }
216       {
217          using MT = DynamicMatrix<int,rowMajor>;
218          using RT = DynamicVector<int,rowVector>;
219          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
220 
221          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
222          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
223          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
224       }
225       {
226          using MT = DynamicMatrix<int,columnMajor>;
227          using RT = DynamicVector<int,rowVector>;
228          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
229 
230          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
231          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
232          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
233       }
234    }
235 
236    // CustomMatrix
237    {
238       {
239          using MT = CustomMatrix<int,unaligned,unpadded,rowMajor>;
240          using RT = DynamicVector<int,rowVector>;
241          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
242 
243          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
244          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
245          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
246       }
247       {
248          using MT = CustomMatrix<int,unaligned,unpadded,columnMajor>;
249          using RT = DynamicVector<int,rowVector>;
250          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
251 
252          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
253          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
254          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
255       }
256       {
257          using MT = CustomMatrix<int,unaligned,unpadded,rowMajor>;
258          using RT = DynamicVector<int,rowVector>;
259          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
260 
261          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
262          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
263          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
264       }
265       {
266          using MT = CustomMatrix<int,unaligned,unpadded,columnMajor>;
267          using RT = DynamicVector<int,rowVector>;
268          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
269 
270          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
271          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
272          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
273       }
274    }
275 
276    // UniformMatrix
277    {
278       {
279          using MT = UniformMatrix<int,rowMajor>;
280          using RT = UniformVector<int,rowVector>;
281          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
282 
283          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
284          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
285          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
286       }
287       {
288          using MT = UniformMatrix<int,columnMajor>;
289          using RT = UniformVector<int,rowVector>;
290          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
291 
292          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
293          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
294          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
295       }
296       {
297          using MT = UniformMatrix<int,rowMajor>;
298          using RT = UniformVector<int,rowVector>;
299          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
300 
301          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
302          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
303          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
304       }
305       {
306          using MT = UniformMatrix<int,columnMajor>;
307          using RT = UniformVector<int,rowVector>;
308          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
309 
310          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
311          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
312          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
313       }
314    }
315 
316    // InitializerMatrix
317    {
318       {
319          using MT = InitializerMatrix<int>;
320          using RT = DynamicVector<int,rowVector>;
321          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
322 
323          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
324          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
325          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
326       }
327       {
328          using MT = InitializerMatrix<int>;
329          using RT = DynamicVector<int,rowVector>;
330          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
331 
332          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
333          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
334          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
335       }
336    }
337 
338    // CompressedMatrix
339    {
340       {
341          using MT = CompressedMatrix<int,rowMajor>;
342          using RT = CompressedVector<int,rowVector>;
343          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
344 
345          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
346          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
347          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
348       }
349       {
350          using MT = CompressedMatrix<int,columnMajor>;
351          using RT = CompressedVector<int,rowVector>;
352          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
353 
354          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
355          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
356          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
357       }
358       {
359          using MT = CompressedMatrix<int,rowMajor>;
360          using RT = CompressedVector<int,rowVector>;
361          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
362 
363          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
364          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
365          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
366       }
367       {
368          using MT = CompressedMatrix<int,columnMajor>;
369          using RT = CompressedVector<int,rowVector>;
370          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
371 
372          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
373          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
374          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
375       }
376    }
377 
378    // IdentityMatrix
379    {
380       {
381          using MT = IdentityMatrix<int,rowMajor>;
382          using RT = CompressedVector<int,rowVector>;
383          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
384 
385          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
386          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
387          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
388       }
389       {
390          using MT = IdentityMatrix<int,columnMajor>;
391          using RT = CompressedVector<int,rowVector>;
392          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
393 
394          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
395          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
396          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
397       }
398       {
399          using MT = IdentityMatrix<int,rowMajor>;
400          using RT = CompressedVector<int,rowVector>;
401          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
402 
403          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
404          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
405          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
406       }
407       {
408          using MT = IdentityMatrix<int,columnMajor>;
409          using RT = CompressedVector<int,rowVector>;
410          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
411 
412          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
413          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
414          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
415       }
416    }
417 
418    // ZeroMatrix
419    {
420       {
421          using MT = ZeroMatrix<int,rowMajor>;
422          using RT = ZeroVector<int,rowVector>;
423          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
424 
425          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
426          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
427          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
428       }
429       {
430          using MT = ZeroMatrix<int,columnMajor>;
431          using RT = ZeroVector<int,rowVector>;
432          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
433 
434          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
435          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
436          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
437       }
438       {
439          using MT = ZeroMatrix<int,rowMajor>;
440          using RT = ZeroVector<int,rowVector>;
441          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
442 
443          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
444          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
445          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
446       }
447       {
448          using MT = ZeroMatrix<int,columnMajor>;
449          using RT = ZeroVector<int,rowVector>;
450          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
451 
452          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
453          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
454          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
455       }
456    }
457 
458    // SymmetricMatrix<DynamicMatrix> (real)
459    {
460       {
461          using MT = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
462          using RT = DynamicVector<int,rowVector>;
463          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
464 
465          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
466          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
467          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
468       }
469       {
470          using MT = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
471          using RT = DynamicVector<int,rowVector>;
472          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
473 
474          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
475          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
476          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
477       }
478       {
479          using MT = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
480          using RT = DynamicVector<int,rowVector>;
481          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
482 
483          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
484          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
485          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
486       }
487       {
488          using MT = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
489          using RT = DynamicVector<int,rowVector>;
490          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
491 
492          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
493          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
494          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
495       }
496    }
497 
498    // SymmetricMatrix<DynamicMatrix> (complex)
499    {
500       {
501          using MT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
502          using RT = DynamicVector<complex<int>,rowVector>;
503          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
504 
505          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
506          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
507          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
508       }
509       {
510          using MT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
511          using RT = DynamicVector<complex<int>,rowVector>;
512          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
513 
514          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
515          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
516          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
517       }
518       {
519          using MT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
520          using RT = DynamicVector<complex<int>,rowVector>;
521          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
522 
523          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
524          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
525          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
526       }
527       {
528          using MT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
529          using RT = DynamicVector<complex<int>,rowVector>;
530          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
531 
532          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
533          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
534          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
535       }
536    }
537 
538    // SymmetricMatrix<UniformMatrix> (real)
539    {
540       {
541          using MT = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
542          using RT = UniformVector<int,rowVector>;
543          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
544 
545          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
546          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
547          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
548       }
549       {
550          using MT = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
551          using RT = UniformVector<int,rowVector>;
552          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
553 
554          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
555          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
556          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
557       }
558       {
559          using MT = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
560          using RT = UniformVector<int,rowVector>;
561          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
562 
563          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
564          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
565          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
566       }
567       {
568          using MT = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
569          using RT = UniformVector<int,rowVector>;
570          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
571 
572          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
573          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
574          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
575       }
576    }
577 
578    // SymmetricMatrix<ZeroMatrix> (real)
579    {
580       {
581          using MT = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
582          using RT = ZeroVector<int,rowVector>;
583          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
584 
585          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
586          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
587          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
588       }
589       {
590          using MT = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
591          using RT = ZeroVector<int,rowVector>;
592          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
593 
594          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
595          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
596          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
597       }
598       {
599          using MT = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
600          using RT = ZeroVector<int,rowVector>;
601          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
602 
603          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
604          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
605          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
606       }
607       {
608          using MT = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
609          using RT = ZeroVector<int,rowVector>;
610          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
611 
612          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
613          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
614          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
615       }
616    }
617 
618    // HermitianMatrix<DynamicMatrix> (symmetric)
619    {
620       {
621          using MT = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
622          using RT = DynamicVector<int,rowVector>;
623          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
624 
625          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
626          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
627          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
628       }
629       {
630          using MT = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
631          using RT = DynamicVector<int,rowVector>;
632          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
633 
634          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
635          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
636          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
637       }
638       {
639          using MT = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
640          using RT = DynamicVector<int,rowVector>;
641          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
642 
643          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
644          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
645          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
646       }
647       {
648          using MT = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
649          using RT = DynamicVector<int,rowVector>;
650          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
651 
652          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
653          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
654          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
655       }
656    }
657 
658    // HermitianMatrix<DynamicMatrix> (Hermitian)
659    {
660       {
661          using MT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
662          using RT = DynamicVector<complex<int>,rowVector>;
663          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
664 
665          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
666          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
667          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
668       }
669       {
670          using MT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
671          using RT = DynamicVector<complex<int>,rowVector>;
672          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
673 
674          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
675          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
676          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
677       }
678       {
679          using MT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
680          using RT = DynamicVector<complex<int>,rowVector>;
681          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
682 
683          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
684          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
685          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
686       }
687       {
688          using MT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
689          using RT = DynamicVector<complex<int>,rowVector>;
690          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
691 
692          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
693          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
694          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
695       }
696    }
697 
698    // LowerMatrix<DynamicMatrix>
699    {
700       {
701          using MT = LowerMatrix< DynamicMatrix<int,rowMajor> >;
702          using RT = DynamicVector<int,rowVector>;
703          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
704 
705          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
706          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
707          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
708       }
709       {
710          using MT = LowerMatrix< DynamicMatrix<int,columnMajor> >;
711          using RT = DynamicVector<int,rowVector>;
712          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
713 
714          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
715          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
716          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
717       }
718       {
719          using MT = LowerMatrix< DynamicMatrix<int,rowMajor> >;
720          using RT = DynamicVector<int,rowVector>;
721          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
722 
723          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
724          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
725          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
726       }
727       {
728          using MT = LowerMatrix< DynamicMatrix<int,columnMajor> >;
729          using RT = DynamicVector<int,rowVector>;
730          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
731 
732          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
733          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
734          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
735       }
736    }
737 
738    // UniLowerMatrix<DynamicMatrix>
739    {
740       {
741          using MT = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
742          using RT = DynamicVector<int,rowVector>;
743          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
744 
745          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
746          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
747          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
748       }
749       {
750          using MT = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
751          using RT = DynamicVector<int,rowVector>;
752          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
753 
754          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
755          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
756          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
757       }
758       {
759          using MT = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
760          using RT = DynamicVector<int,rowVector>;
761          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
762 
763          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
764          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
765          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
766       }
767       {
768          using MT = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
769          using RT = DynamicVector<int,rowVector>;
770          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
771 
772          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
773          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
774          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
775       }
776    }
777 
778    // StrictlyLowerMatrix<DynamicMatrix>
779    {
780       {
781          using MT = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
782          using RT = DynamicVector<int,rowVector>;
783          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
784 
785          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
786          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
787          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
788       }
789       {
790          using MT = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
791          using RT = DynamicVector<int,rowVector>;
792          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
793 
794          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
795          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
796          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
797       }
798       {
799          using MT = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
800          using RT = DynamicVector<int,rowVector>;
801          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
802 
803          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
804          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
805          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
806       }
807       {
808          using MT = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
809          using RT = DynamicVector<int,rowVector>;
810          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
811 
812          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
813          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
814          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
815       }
816    }
817 
818    // UpperMatrix<DynamicMatrix>
819    {
820       {
821          using MT = UpperMatrix< DynamicMatrix<int,rowMajor> >;
822          using RT = DynamicVector<int,rowVector>;
823          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
824 
825          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
826          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
827          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
828       }
829       {
830          using MT = UpperMatrix< DynamicMatrix<int,columnMajor> >;
831          using RT = DynamicVector<int,rowVector>;
832          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
833 
834          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
835          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
836          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
837       }
838       {
839          using MT = UpperMatrix< DynamicMatrix<int,rowMajor> >;
840          using RT = DynamicVector<int,rowVector>;
841          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
842 
843          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
844          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
845          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
846       }
847       {
848          using MT = UpperMatrix< DynamicMatrix<int,columnMajor> >;
849          using RT = DynamicVector<int,rowVector>;
850          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
851 
852          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
853          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
854          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
855       }
856    }
857 
858    // UniUpperMatrix<DynamicMatrix>
859    {
860       {
861          using MT = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
862          using RT = DynamicVector<int,rowVector>;
863          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
864 
865          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
866          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
867          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
868       }
869       {
870          using MT = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
871          using RT = DynamicVector<int,rowVector>;
872          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
873 
874          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
875          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
876          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
877       }
878       {
879          using MT = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
880          using RT = DynamicVector<int,rowVector>;
881          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
882 
883          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
884          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
885          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
886       }
887       {
888          using MT = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
889          using RT = DynamicVector<int,rowVector>;
890          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
891 
892          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
893          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
894          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
895       }
896    }
897 
898    // StrictlyUpperMatrix<DynamicMatrix>
899    {
900       {
901          using MT = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
902          using RT = DynamicVector<int,rowVector>;
903          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
904 
905          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
906          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
907          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
908       }
909       {
910          using MT = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
911          using RT = DynamicVector<int,rowVector>;
912          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
913 
914          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
915          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
916          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
917       }
918       {
919          using MT = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
920          using RT = DynamicVector<int,rowVector>;
921          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
922 
923          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
924          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
925          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
926       }
927       {
928          using MT = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
929          using RT = DynamicVector<int,rowVector>;
930          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
931 
932          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
933          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
934          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
935       }
936    }
937 
938    // DiagonalMatrix<DynamicMatrix>
939    {
940       {
941          using MT = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
942          using RT = DynamicVector<int,rowVector>;
943          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
944 
945          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
946          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
947          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
948       }
949       {
950          using MT = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
951          using RT = DynamicVector<int,rowVector>;
952          static_assert( IsSame_v< RowTrait_t<MT>, RT >, "Non-matching type detected" );
953 
954          using Expr = RemoveCVRef_t< decltype( row( std::declval<MT>(), 0UL ) ) >;
955          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
956          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
957       }
958       {
959          using MT = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
960          using RT = DynamicVector<int,rowVector>;
961          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
962 
963          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
964          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
965          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
966       }
967       {
968          using MT = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
969          using RT = DynamicVector<int,rowVector>;
970          static_assert( IsSame_v< RowTrait_t<MT,0UL>, RT >, "Non-matching type detected" );
971 
972          using Expr = RemoveCVRef_t< decltype( row<0UL>( std::declval<MT>() ) ) >;
973          static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
974          static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
975       }
976    }
977 }
978 //*************************************************************************************************
979 
980 } // namespace rowtrait
981 
982 } // namespace traits
983 
984 } // namespace mathtest
985 
986 } // namespace blazetest
987 
988 
989 
990 
991 //=================================================================================================
992 //
993 //  MAIN FUNCTION
994 //
995 //=================================================================================================
996 
997 //*************************************************************************************************
main()998 int main()
999 {
1000    std::cout << "   Running RowTrait class test..." << std::endl;
1001 
1002    try
1003    {
1004       RUN_ROWTRAIT_CLASS_TEST;
1005    }
1006    catch( std::exception& ex ) {
1007       std::cerr << "\n\n ERROR DETECTED during RowTrait class test:\n"
1008                 << ex.what() << "\n";
1009       return EXIT_FAILURE;
1010    }
1011 
1012    return EXIT_SUCCESS;
1013 }
1014 //*************************************************************************************************
1015