1 //=================================================================================================
2 /*!
3 //  \file src/mathtest/traits/addtrait/ClassTest.cpp
4 //  \brief Source file for the AddTrait 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/Aliases.h>
44 #include <blaze/math/CompressedMatrix.h>
45 #include <blaze/math/CompressedVector.h>
46 #include <blaze/math/CustomMatrix.h>
47 #include <blaze/math/CustomVector.h>
48 #include <blaze/math/DiagonalMatrix.h>
49 #include <blaze/math/DynamicMatrix.h>
50 #include <blaze/math/DynamicVector.h>
51 #include <blaze/math/HermitianMatrix.h>
52 #include <blaze/math/HybridMatrix.h>
53 #include <blaze/math/HybridVector.h>
54 #include <blaze/math/IdentityMatrix.h>
55 #include <blaze/math/InitializerMatrix.h>
56 #include <blaze/math/InitializerVector.h>
57 #include <blaze/math/LowerMatrix.h>
58 #include <blaze/math/StaticMatrix.h>
59 #include <blaze/math/StaticVector.h>
60 #include <blaze/math/StrictlyLowerMatrix.h>
61 #include <blaze/math/StrictlyUpperMatrix.h>
62 #include <blaze/math/SymmetricMatrix.h>
63 #include <blaze/math/traits/AddTrait.h>
64 #include <blaze/math/typetraits/StorageOrder.h>
65 #include <blaze/math/typetraits/TransposeFlag.h>
66 #include <blaze/math/UniformMatrix.h>
67 #include <blaze/math/UniformVector.h>
68 #include <blaze/math/UniLowerMatrix.h>
69 #include <blaze/math/UniUpperMatrix.h>
70 #include <blaze/math/UpperMatrix.h>
71 #include <blaze/math/ZeroMatrix.h>
72 #include <blaze/math/ZeroVector.h>
73 #include <blaze/util/Complex.h>
74 #include <blaze/util/typetraits/IsSame.h>
75 #include <blaze/util/typetraits/RemoveCVRef.h>
76 #include <blazetest/mathtest/traits/addtrait/ClassTest.h>
77 
78 
79 namespace blazetest {
80 
81 namespace mathtest {
82 
83 namespace traits {
84 
85 namespace addtrait {
86 
87 //=================================================================================================
88 //
89 //  CONSTRUCTORS
90 //
91 //=================================================================================================
92 
93 //*************************************************************************************************
94 /*!\brief Constructor for the AddTrait class test.
95 //
96 // \exception std::runtime_error Error detected.
97 */
ClassTest()98 ClassTest::ClassTest()
99 {
100    testScalarAddition();
101    testVectorAddition();
102    testMatrixAddition();
103 }
104 //*************************************************************************************************
105 
106 
107 
108 
109 //=================================================================================================
110 //
111 //  TEST FUNCTIONS
112 //
113 //=================================================================================================
114 
115 //*************************************************************************************************
116 /*!\brief Test of the 'AddTrait' class template for scalar/scalar addition operations.
117 //
118 // \return void
119 // \exception std::runtime_error Error detected.
120 //
121 // This function performs a compile time test of the 'AddTrait' class template for scalar/scalar
122 // addition operations. In case an error is detected, a compilation error is created.
123 */
testScalarAddition()124 void ClassTest::testScalarAddition()
125 {
126    using namespace blaze;
127 
128 
129    // short/...
130    {
131       // .../short
132       {
133          using T1 = short;
134          using T2 = short;
135          using RT = short;
136          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
137       }
138 
139       // .../int
140       {
141          using T1 = short;
142          using T2 = int;
143          using RT = int;
144          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
145       }
146 
147       // .../float
148       {
149          using T1 = short;
150          using T2 = float;
151          using RT = float;
152          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
153       }
154 
155       // .../double
156       {
157          using T1 = short;
158          using T2 = double;
159          using RT = double;
160          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
161       }
162    }
163 
164    // int/...
165    {
166       // .../short
167       {
168          using T1 = int;
169          using T2 = short;
170          using RT = int;
171          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
172       }
173 
174       // .../int
175       {
176          using T1 = int;
177          using T2 = int;
178          using RT = int;
179          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
180       }
181 
182       // .../float
183       {
184          using T1 = int;
185          using T2 = float;
186          using RT = float;
187          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
188       }
189 
190       // .../double
191       {
192          using T1 = int;
193          using T2 = double;
194          using RT = double;
195          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
196       }
197    }
198 
199    // float/...
200    {
201       // .../short
202       {
203          using T1 = float;
204          using T2 = short;
205          using RT = float;
206          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
207       }
208 
209       // .../int
210       {
211          using T1 = float;
212          using T2 = int;
213          using RT = float;
214          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
215       }
216 
217       // .../float
218       {
219          using T1 = float;
220          using T2 = float;
221          using RT = float;
222          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
223       }
224 
225       // .../double
226       {
227          using T1 = float;
228          using T2 = double;
229          using RT = double;
230          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
231       }
232 
233       // .../complex<float>
234       {
235          using T1 = float;
236          using T2 = complex<float>;
237          using RT = complex<float>;
238          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
239       }
240    }
241 
242    // double/...
243    {
244       // .../short
245       {
246          using T1 = double;
247          using T2 = short;
248          using RT = double;
249          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
250       }
251 
252       // .../int
253       {
254          using T1 = double;
255          using T2 = int;
256          using RT = double;
257          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
258       }
259 
260       // .../float
261       {
262          using T1 = double;
263          using T2 = float;
264          using RT = double;
265          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
266       }
267 
268       // .../double
269       {
270          using T1 = double;
271          using T2 = double;
272          using RT = double;
273          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
274       }
275 
276       // .../complex<double>
277       {
278          using T1 = double;
279          using T2 = complex<double>;
280          using RT = complex<double>;
281          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
282       }
283    }
284 
285    // complex<double>/...
286    {
287       // .../double
288       {
289          using T1 = complex<double>;
290          using T2 = double;
291          using RT = complex<double>;
292          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
293       }
294 
295       // .../complex<double>
296       {
297          using T1 = complex<double>;
298          using T2 = complex<double>;
299          using RT = complex<double>;
300          static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
301       }
302    }
303 }
304 //*************************************************************************************************
305 
306 
307 //*************************************************************************************************
308 /*!\brief Test of the 'AddTrait' class template for vector/vector addition operations.
309 //
310 // \return void
311 // \exception std::runtime_error Error detected.
312 //
313 // This function performs a compile time test of the 'AddTrait' class template for vector/vector
314 // addition operations. In case an error is detected, a compilation error is created.
315 */
testVectorAddition()316 void ClassTest::testVectorAddition()
317 {
318    using namespace blaze;
319 
320 
321    // StaticVector/...
322    {
323       // .../StaticVector
324       {
325          {
326             using T1 = StaticVector<int,3UL,columnVector>;
327             using T2 = StaticVector<double,3UL,columnVector>;
328             using RT = StaticVector<double,3UL,columnVector>;
329             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
330 
331             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
332             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
333             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
334          }
335          {
336             using T1 = StaticVector<int,3UL,rowVector>;
337             using T2 = StaticVector<double,3UL,rowVector>;
338             using RT = StaticVector<double,3UL,rowVector>;
339             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
340 
341             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
342             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
343             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
344          }
345       }
346 
347       // .../HybridVector
348       {
349          {
350             using T1 = StaticVector<int,3UL,columnVector>;
351             using T2 = HybridVector<double,5UL,columnVector>;
352             using RT = StaticVector<double,3UL,columnVector>;
353             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
354 
355             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
356             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
357             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
358          }
359          {
360             using T1 = StaticVector<int,3UL,rowVector>;
361             using T2 = HybridVector<double,5UL,rowVector>;
362             using RT = StaticVector<double,3UL,rowVector>;
363             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
364 
365             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
366             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
367             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
368          }
369       }
370 
371       // .../DynamicVector
372       {
373          {
374             using T1 = StaticVector<int,3UL,columnVector>;
375             using T2 = DynamicVector<double,columnVector>;
376             using RT = StaticVector<double,3UL,columnVector>;
377             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
378 
379             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
380             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
381             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
382          }
383          {
384             using T1 = StaticVector<int,3UL,rowVector>;
385             using T2 = DynamicVector<double,rowVector>;
386             using RT = StaticVector<double,3UL,rowVector>;
387             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
388 
389             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
390             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
391             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
392          }
393       }
394 
395       // .../CustomVector
396       {
397          {
398             using T1 = StaticVector<int,3UL,columnVector>;
399             using T2 = CustomVector<double,unaligned,unpadded,columnVector>;
400             using RT = StaticVector<double,3UL,columnVector>;
401             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
402 
403             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
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 T1 = StaticVector<int,3UL,rowVector>;
409             using T2 = CustomVector<double,unaligned,unpadded,rowVector>;
410             using RT = StaticVector<double,3UL,rowVector>;
411             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
412 
413             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
414             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
415             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
416          }
417       }
418 
419       // .../UniformVector
420       {
421          {
422             using T1 = StaticVector<int,3UL,columnVector>;
423             using T2 = UniformVector<double,columnVector>;
424             using RT = StaticVector<double,3UL,columnVector>;
425             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
426 
427             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
428             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
429             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
430          }
431          {
432             using T1 = StaticVector<int,3UL,rowVector>;
433             using T2 = UniformVector<double,rowVector>;
434             using RT = StaticVector<double,3UL,rowVector>;
435             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
436 
437             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
438             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
439             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
440          }
441       }
442 
443       // .../InitializerVector
444       {
445          {
446             using T1 = StaticVector<int,3UL,columnVector>;
447             using T2 = InitializerVector<double,columnVector>;
448             using RT = StaticVector<double,3UL,columnVector>;
449             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
450 
451             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
452             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
453             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
454          }
455          {
456             using T1 = StaticVector<int,3UL,rowVector>;
457             using T2 = InitializerVector<double,rowVector>;
458             using RT = StaticVector<double,3UL,rowVector>;
459             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
460 
461             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
462             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
463             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
464          }
465       }
466 
467       // .../CompressedVector
468       {
469          {
470             using T1 = StaticVector<int,3UL,columnVector>;
471             using T2 = CompressedVector<double,columnVector>;
472             using RT = StaticVector<double,3UL,columnVector>;
473             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
474 
475             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
476             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
477             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
478          }
479          {
480             using T1 = StaticVector<int,3UL,rowVector>;
481             using T2 = CompressedVector<double,rowVector>;
482             using RT = StaticVector<double,3UL,rowVector>;
483             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
484 
485             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
486             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
487             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
488          }
489       }
490 
491       // .../ZeroVector
492       {
493          {
494             using T1 = StaticVector<int,3UL,columnVector>;
495             using T2 = ZeroVector<double,columnVector>;
496             using RT = StaticVector<double,3UL,columnVector>;
497             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
498 
499             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
500             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
501             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
502          }
503          {
504             using T1 = StaticVector<int,3UL,rowVector>;
505             using T2 = ZeroVector<double,rowVector>;
506             using RT = StaticVector<double,3UL,rowVector>;
507             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
508 
509             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
510             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
511             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
512          }
513       }
514    }
515 
516    // HybridVector/...
517    {
518       // .../StaticVector
519       {
520          {
521             using T1 = HybridVector<int,5UL,columnVector>;
522             using T2 = StaticVector<double,3UL,columnVector>;
523             using RT = StaticVector<double,3UL,columnVector>;
524             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
525 
526             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
527             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
528             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
529          }
530          {
531             using T1 = HybridVector<int,5UL,rowVector>;
532             using T2 = StaticVector<double,3UL,rowVector>;
533             using RT = StaticVector<double,3UL,rowVector>;
534             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
535 
536             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
537             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
538             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
539          }
540       }
541 
542       // .../HybridVector
543       {
544          {
545             using T1 = HybridVector<int,5UL,columnVector>;
546             using T2 = HybridVector<double,7UL,columnVector>;
547             using RT = HybridVector<double,5UL,columnVector>;
548             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
549 
550             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
551             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
552             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
553          }
554          {
555             using T1 = HybridVector<int,5UL,rowVector>;
556             using T2 = HybridVector<double,7UL,rowVector>;
557             using RT = HybridVector<double,5UL,rowVector>;
558             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
559 
560             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
561             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
562             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
563          }
564       }
565 
566       // .../DynamicVector
567       {
568          {
569             using T1 = HybridVector<int,5UL,columnVector>;
570             using T2 = DynamicVector<double,columnVector>;
571             using RT = HybridVector<double,5UL,columnVector>;
572             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
573 
574             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
575             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
576             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
577          }
578          {
579             using T1 = HybridVector<int,5UL,rowVector>;
580             using T2 = DynamicVector<double,rowVector>;
581             using RT = HybridVector<double,5UL,rowVector>;
582             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
583 
584             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
585             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
586             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
587          }
588       }
589 
590       // .../CustomVector
591       {
592          {
593             using T1 = HybridVector<int,5UL,columnVector>;
594             using T2 = CustomVector<double,unaligned,unpadded,columnVector>;
595             using RT = HybridVector<double,5UL,columnVector>;
596             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
597 
598             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
599             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
600             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
601          }
602          {
603             using T1 = HybridVector<int,5UL,rowVector>;
604             using T2 = CustomVector<double,unaligned,unpadded,rowVector>;
605             using RT = HybridVector<double,5UL,rowVector>;
606             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
607 
608             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
609             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
610             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
611          }
612       }
613 
614       // .../UniformVector
615       {
616          {
617             using T1 = HybridVector<int,5UL,columnVector>;
618             using T2 = UniformVector<double,columnVector>;
619             using RT = HybridVector<double,5UL,columnVector>;
620             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
621 
622             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
623             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
624             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
625          }
626          {
627             using T1 = HybridVector<int,5UL,rowVector>;
628             using T2 = UniformVector<double,rowVector>;
629             using RT = HybridVector<double,5UL,rowVector>;
630             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
631 
632             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
633             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
634             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
635          }
636       }
637 
638       // .../InitializerVector
639       {
640          {
641             using T1 = HybridVector<int,5UL,columnVector>;
642             using T2 = InitializerVector<double,columnVector>;
643             using RT = HybridVector<double,5UL,columnVector>;
644             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
645 
646             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
647             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
648             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
649          }
650          {
651             using T1 = HybridVector<int,5UL,rowVector>;
652             using T2 = InitializerVector<double,rowVector>;
653             using RT = HybridVector<double,5UL,rowVector>;
654             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
655 
656             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
657             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
658             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
659          }
660       }
661 
662       // .../CompressedVector
663       {
664          {
665             using T1 = HybridVector<int,5UL,columnVector>;
666             using T2 = CompressedVector<double,columnVector>;
667             using RT = HybridVector<double,5UL,columnVector>;
668             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
669 
670             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
671             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
672             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
673          }
674          {
675             using T1 = HybridVector<int,5UL,rowVector>;
676             using T2 = CompressedVector<double,rowVector>;
677             using RT = HybridVector<double,5UL,rowVector>;
678             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
679 
680             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
681             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
682             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
683          }
684       }
685 
686       // .../ZeroVector
687       {
688          {
689             using T1 = HybridVector<int,5UL,columnVector>;
690             using T2 = ZeroVector<double,columnVector>;
691             using RT = HybridVector<double,5UL,columnVector>;
692             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
693 
694             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
695             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
696             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
697          }
698          {
699             using T1 = HybridVector<int,5UL,rowVector>;
700             using T2 = ZeroVector<double,rowVector>;
701             using RT = HybridVector<double,5UL,rowVector>;
702             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
703 
704             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
705             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
706             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
707          }
708       }
709    }
710 
711    // DynamicVector/...
712    {
713       // .../StaticVector
714       {
715          {
716             using T1 = DynamicVector<int,columnVector>;
717             using T2 = StaticVector<double,3UL,columnVector>;
718             using RT = StaticVector<double,3UL,columnVector>;
719             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
720 
721             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
722             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
723             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
724          }
725          {
726             using T1 = DynamicVector<int,rowVector>;
727             using T2 = StaticVector<double,3UL,rowVector>;
728             using RT = StaticVector<double,3UL,rowVector>;
729             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
730 
731             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
732             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
733             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
734          }
735       }
736 
737       // .../HybridVector
738       {
739          {
740             using T1 = DynamicVector<int,columnVector>;
741             using T2 = HybridVector<double,7UL,columnVector>;
742             using RT = HybridVector<double,7UL,columnVector>;
743             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
744 
745             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
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 T1 = DynamicVector<int,rowVector>;
751             using T2 = HybridVector<double,7UL,rowVector>;
752             using RT = HybridVector<double,7UL,rowVector>;
753             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
754 
755             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
756             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
757             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
758          }
759       }
760 
761       // .../DynamicVector
762       {
763          {
764             using T1 = DynamicVector<int,columnVector>;
765             using T2 = DynamicVector<double,columnVector>;
766             using RT = DynamicVector<double,columnVector>;
767             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
768 
769             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
770             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
771             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
772          }
773          {
774             using T1 = DynamicVector<int,rowVector>;
775             using T2 = DynamicVector<double,rowVector>;
776             using RT = DynamicVector<double,rowVector>;
777             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
778 
779             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
780             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
781             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
782          }
783       }
784 
785       // .../CustomVector
786       {
787          {
788             using T1 = DynamicVector<int,columnVector>;
789             using T2 = CustomVector<double,unaligned,unpadded,columnVector>;
790             using RT = DynamicVector<double,columnVector>;
791             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
792 
793             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
794             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
795             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
796          }
797          {
798             using T1 = DynamicVector<int,rowVector>;
799             using T2 = CustomVector<double,unaligned,unpadded,rowVector>;
800             using RT = DynamicVector<double,rowVector>;
801             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
802 
803             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
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 
809       // .../UniformVector
810       {
811          {
812             using T1 = DynamicVector<int,columnVector>;
813             using T2 = UniformVector<double,columnVector>;
814             using RT = DynamicVector<double,columnVector>;
815             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
816 
817             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
818             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
819             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
820          }
821          {
822             using T1 = DynamicVector<int,rowVector>;
823             using T2 = UniformVector<double,rowVector>;
824             using RT = DynamicVector<double,rowVector>;
825             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
826 
827             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
828             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
829             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
830          }
831       }
832 
833       // .../InitializerVector
834       {
835          {
836             using T1 = DynamicVector<int,columnVector>;
837             using T2 = InitializerVector<double,columnVector>;
838             using RT = DynamicVector<double,columnVector>;
839             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
840 
841             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
842             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
843             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
844          }
845          {
846             using T1 = DynamicVector<int,rowVector>;
847             using T2 = InitializerVector<double,rowVector>;
848             using RT = DynamicVector<double,rowVector>;
849             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
850 
851             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
852             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
853             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
854          }
855       }
856 
857       // .../CompressedVector
858       {
859          {
860             using T1 = DynamicVector<int,columnVector>;
861             using T2 = CompressedVector<double,columnVector>;
862             using RT = DynamicVector<double,columnVector>;
863             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
864 
865             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
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 T1 = DynamicVector<int,rowVector>;
871             using T2 = CompressedVector<double,rowVector>;
872             using RT = DynamicVector<double,rowVector>;
873             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
874 
875             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
876             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
877             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
878          }
879       }
880 
881       // .../ZeroVector
882       {
883          {
884             using T1 = DynamicVector<int,columnVector>;
885             using T2 = ZeroVector<double,columnVector>;
886             using RT = DynamicVector<double,columnVector>;
887             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
888 
889             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
890             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
891             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
892          }
893          {
894             using T1 = DynamicVector<int,rowVector>;
895             using T2 = ZeroVector<double,rowVector>;
896             using RT = DynamicVector<double,rowVector>;
897             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
898 
899             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
900             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
901             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
902          }
903       }
904    }
905 
906    // CustomVector/...
907    {
908       // .../StaticVector
909       {
910          {
911             using T1 = CustomVector<int,unaligned,unpadded,columnVector>;
912             using T2 = StaticVector<double,3UL,columnVector>;
913             using RT = StaticVector<double,3UL,columnVector>;
914             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
915 
916             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
917             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
918             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
919          }
920          {
921             using T1 = CustomVector<int,unaligned,unpadded,rowVector>;
922             using T2 = StaticVector<double,3UL,rowVector>;
923             using RT = StaticVector<double,3UL,rowVector>;
924             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
925 
926             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
927             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
928             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
929          }
930       }
931 
932       // .../HybridVector
933       {
934          {
935             using T1 = CustomVector<int,unaligned,unpadded,columnVector>;
936             using T2 = HybridVector<double,7UL,columnVector>;
937             using RT = HybridVector<double,7UL,columnVector>;
938             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
939 
940             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
941             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
942             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
943          }
944          {
945             using T1 = CustomVector<int,unaligned,unpadded,rowVector>;
946             using T2 = HybridVector<double,7UL,rowVector>;
947             using RT = HybridVector<double,7UL,rowVector>;
948             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
949 
950             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
951             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
952             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
953          }
954       }
955 
956       // .../DynamicVector
957       {
958          {
959             using T1 = CustomVector<int,unaligned,unpadded,columnVector>;
960             using T2 = DynamicVector<double,columnVector>;
961             using RT = DynamicVector<double,columnVector>;
962             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
963 
964             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
965             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
966             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
967          }
968          {
969             using T1 = CustomVector<int,unaligned,unpadded,rowVector>;
970             using T2 = DynamicVector<double,rowVector>;
971             using RT = DynamicVector<double,rowVector>;
972             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
973 
974             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
975             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
976             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
977          }
978       }
979 
980       // .../CustomVector
981       {
982          {
983             using T1 = CustomVector<int,unaligned,unpadded,columnVector>;
984             using T2 = CustomVector<double,unaligned,unpadded,columnVector>;
985             using RT = DynamicVector<double,columnVector>;
986             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
987 
988             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
989             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
990             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
991          }
992          {
993             using T1 = CustomVector<int,unaligned,unpadded,rowVector>;
994             using T2 = CustomVector<double,unaligned,unpadded,rowVector>;
995             using RT = DynamicVector<double,rowVector>;
996             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
997 
998             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
999             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1000             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1001          }
1002       }
1003 
1004       // .../UniformVector
1005       {
1006          {
1007             using T1 = CustomVector<int,unaligned,unpadded,columnVector>;
1008             using T2 = UniformVector<double,columnVector>;
1009             using RT = DynamicVector<double,columnVector>;
1010             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1011 
1012             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1013             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1014             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1015          }
1016          {
1017             using T1 = CustomVector<int,unaligned,unpadded,rowVector>;
1018             using T2 = UniformVector<double,rowVector>;
1019             using RT = DynamicVector<double,rowVector>;
1020             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1021 
1022             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1023             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1024             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1025          }
1026       }
1027 
1028       // .../InitializerVector
1029       {
1030          {
1031             using T1 = CustomVector<int,unaligned,unpadded,columnVector>;
1032             using T2 = InitializerVector<double,columnVector>;
1033             using RT = DynamicVector<double,columnVector>;
1034             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1035 
1036             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1037             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1038             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1039          }
1040          {
1041             using T1 = CustomVector<int,unaligned,unpadded,rowVector>;
1042             using T2 = InitializerVector<double,rowVector>;
1043             using RT = DynamicVector<double,rowVector>;
1044             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1045 
1046             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1047             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1048             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1049          }
1050       }
1051 
1052       // .../CompressedVector
1053       {
1054          {
1055             using T1 = CustomVector<int,unaligned,unpadded,columnVector>;
1056             using T2 = CompressedVector<double,columnVector>;
1057             using RT = DynamicVector<double,columnVector>;
1058             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1059 
1060             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1061             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1062             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1063          }
1064          {
1065             using T1 = CustomVector<int,unaligned,unpadded,rowVector>;
1066             using T2 = CompressedVector<double,rowVector>;
1067             using RT = DynamicVector<double,rowVector>;
1068             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1069 
1070             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1071             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1072             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1073          }
1074       }
1075 
1076       // .../ZeroVector
1077       {
1078          {
1079             using T1 = CustomVector<int,unaligned,unpadded,columnVector>;
1080             using T2 = ZeroVector<double,columnVector>;
1081             using RT = DynamicVector<double,columnVector>;
1082             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1083 
1084             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1085             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1086             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1087          }
1088          {
1089             using T1 = CustomVector<int,unaligned,unpadded,rowVector>;
1090             using T2 = ZeroVector<double,rowVector>;
1091             using RT = DynamicVector<double,rowVector>;
1092             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1093 
1094             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1095             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1096             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1097          }
1098       }
1099    }
1100 
1101    // UniformVector/...
1102    {
1103       // .../StaticVector
1104       {
1105          {
1106             using T1 = UniformVector<int,columnVector>;
1107             using T2 = StaticVector<double,3UL,columnVector>;
1108             using RT = StaticVector<double,3UL,columnVector>;
1109             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1110 
1111             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1112             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1113             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1114          }
1115          {
1116             using T1 = UniformVector<int,rowVector>;
1117             using T2 = StaticVector<double,3UL,rowVector>;
1118             using RT = StaticVector<double,3UL,rowVector>;
1119             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1120 
1121             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1122             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1123             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1124          }
1125       }
1126 
1127       // .../HybridVector
1128       {
1129          {
1130             using T1 = UniformVector<int,columnVector>;
1131             using T2 = HybridVector<double,7UL,columnVector>;
1132             using RT = HybridVector<double,7UL,columnVector>;
1133             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1134 
1135             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1136             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1137             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1138          }
1139          {
1140             using T1 = UniformVector<int,rowVector>;
1141             using T2 = HybridVector<double,7UL,rowVector>;
1142             using RT = HybridVector<double,7UL,rowVector>;
1143             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1144 
1145             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1146             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1147             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1148          }
1149       }
1150 
1151       // .../DynamicVector
1152       {
1153          {
1154             using T1 = UniformVector<int,columnVector>;
1155             using T2 = DynamicVector<double,columnVector>;
1156             using RT = DynamicVector<double,columnVector>;
1157             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1158 
1159             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1160             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1161             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1162          }
1163          {
1164             using T1 = UniformVector<int,rowVector>;
1165             using T2 = DynamicVector<double,rowVector>;
1166             using RT = DynamicVector<double,rowVector>;
1167             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1168 
1169             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1170             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1171             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1172          }
1173       }
1174 
1175       // .../CustomVector
1176       {
1177          {
1178             using T1 = UniformVector<int,columnVector>;
1179             using T2 = CustomVector<double,unaligned,unpadded,columnVector>;
1180             using RT = DynamicVector<double,columnVector>;
1181             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1182 
1183             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1184             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1185             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1186          }
1187          {
1188             using T1 = UniformVector<int,rowVector>;
1189             using T2 = CustomVector<double,unaligned,unpadded,rowVector>;
1190             using RT = DynamicVector<double,rowVector>;
1191             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1192 
1193             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1194             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1195             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1196          }
1197       }
1198 
1199       // .../UniformVector
1200       {
1201          {
1202             using T1 = UniformVector<int,columnVector>;
1203             using T2 = UniformVector<double,columnVector>;
1204             using RT = UniformVector<double,columnVector>;
1205             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1206 
1207             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1208             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1209             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1210          }
1211          {
1212             using T1 = UniformVector<int,rowVector>;
1213             using T2 = UniformVector<double,rowVector>;
1214             using RT = UniformVector<double,rowVector>;
1215             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1216 
1217             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1218             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1219             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1220          }
1221       }
1222 
1223       // .../InitializerVector
1224       {
1225          {
1226             using T1 = UniformVector<int,columnVector>;
1227             using T2 = InitializerVector<double,columnVector>;
1228             using RT = DynamicVector<double,columnVector>;
1229             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1230 
1231             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1232             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1233             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1234          }
1235          {
1236             using T1 = UniformVector<int,rowVector>;
1237             using T2 = InitializerVector<double,rowVector>;
1238             using RT = DynamicVector<double,rowVector>;
1239             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1240 
1241             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1242             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1243             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1244          }
1245       }
1246 
1247       // .../CompressedVector
1248       {
1249          {
1250             using T1 = UniformVector<int,columnVector>;
1251             using T2 = CompressedVector<double,columnVector>;
1252             using RT = DynamicVector<double,columnVector>;
1253             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1254 
1255             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1256             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1257             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1258          }
1259          {
1260             using T1 = UniformVector<int,rowVector>;
1261             using T2 = CompressedVector<double,rowVector>;
1262             using RT = DynamicVector<double,rowVector>;
1263             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1264 
1265             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1266             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1267             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1268          }
1269       }
1270 
1271       // .../ZeroVector
1272       {
1273          {
1274             using T1 = UniformVector<int,columnVector>;
1275             using T2 = ZeroVector<double,columnVector>;
1276             using RT = UniformVector<double,columnVector>;
1277             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1278 
1279             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1280             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1281             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1282          }
1283          {
1284             using T1 = UniformVector<int,rowVector>;
1285             using T2 = ZeroVector<double,rowVector>;
1286             using RT = UniformVector<double,rowVector>;
1287             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1288 
1289             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1290             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1291             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1292          }
1293       }
1294    }
1295 
1296    // InitializerVector/...
1297    {
1298       // .../StaticVector
1299       {
1300          {
1301             using T1 = InitializerVector<int,columnVector>;
1302             using T2 = StaticVector<double,3UL,columnVector>;
1303             using RT = StaticVector<double,3UL,columnVector>;
1304             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1305 
1306             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1307             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1308             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1309          }
1310          {
1311             using T1 = InitializerVector<int,rowVector>;
1312             using T2 = StaticVector<double,3UL,rowVector>;
1313             using RT = StaticVector<double,3UL,rowVector>;
1314             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1315 
1316             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1317             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1318             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1319          }
1320       }
1321 
1322       // .../HybridVector
1323       {
1324          {
1325             using T1 = InitializerVector<int,columnVector>;
1326             using T2 = HybridVector<double,7UL,columnVector>;
1327             using RT = HybridVector<double,7UL,columnVector>;
1328             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1329 
1330             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1331             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1332             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1333          }
1334          {
1335             using T1 = InitializerVector<int,rowVector>;
1336             using T2 = HybridVector<double,7UL,rowVector>;
1337             using RT = HybridVector<double,7UL,rowVector>;
1338             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1339 
1340             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1341             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1342             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1343          }
1344       }
1345 
1346       // .../DynamicVector
1347       {
1348          {
1349             using T1 = InitializerVector<int,columnVector>;
1350             using T2 = DynamicVector<double,columnVector>;
1351             using RT = DynamicVector<double,columnVector>;
1352             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1353 
1354             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1355             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1356             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1357          }
1358          {
1359             using T1 = InitializerVector<int,rowVector>;
1360             using T2 = DynamicVector<double,rowVector>;
1361             using RT = DynamicVector<double,rowVector>;
1362             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1363 
1364             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1365             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1366             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1367          }
1368       }
1369 
1370       // .../CustomVector
1371       {
1372          {
1373             using T1 = InitializerVector<int,columnVector>;
1374             using T2 = CustomVector<double,unaligned,unpadded,columnVector>;
1375             using RT = DynamicVector<double,columnVector>;
1376             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1377 
1378             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1379             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1380             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1381          }
1382          {
1383             using T1 = InitializerVector<int,rowVector>;
1384             using T2 = CustomVector<double,unaligned,unpadded,rowVector>;
1385             using RT = DynamicVector<double,rowVector>;
1386             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1387 
1388             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1389             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1390             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1391          }
1392       }
1393 
1394       // .../UniformVector
1395       {
1396          {
1397             using T1 = InitializerVector<int,columnVector>;
1398             using T2 = UniformVector<double,columnVector>;
1399             using RT = DynamicVector<double,columnVector>;
1400             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1401 
1402             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1403             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1404             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1405          }
1406          {
1407             using T1 = InitializerVector<int,rowVector>;
1408             using T2 = UniformVector<double,rowVector>;
1409             using RT = DynamicVector<double,rowVector>;
1410             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1411 
1412             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1413             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1414             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1415          }
1416       }
1417 
1418       // .../InitializerVector
1419       {
1420          {
1421             using T1 = InitializerVector<int,columnVector>;
1422             using T2 = InitializerVector<double,columnVector>;
1423             using RT = DynamicVector<double,columnVector>;
1424             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1425 
1426             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1427             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1428             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1429          }
1430          {
1431             using T1 = InitializerVector<int,rowVector>;
1432             using T2 = InitializerVector<double,rowVector>;
1433             using RT = DynamicVector<double,rowVector>;
1434             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1435 
1436             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1437             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1438             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1439          }
1440       }
1441 
1442       // .../CompressedVector
1443       {
1444          {
1445             using T1 = InitializerVector<int,columnVector>;
1446             using T2 = CompressedVector<double,columnVector>;
1447             using RT = DynamicVector<double,columnVector>;
1448             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1449 
1450             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1451             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1452             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1453          }
1454          {
1455             using T1 = InitializerVector<int,rowVector>;
1456             using T2 = CompressedVector<double,rowVector>;
1457             using RT = DynamicVector<double,rowVector>;
1458             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1459 
1460             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1461             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1462             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1463          }
1464       }
1465 
1466       // .../ZeroVector
1467       {
1468          {
1469             using T1 = InitializerVector<int,columnVector>;
1470             using T2 = ZeroVector<double,columnVector>;
1471             using RT = DynamicVector<double,columnVector>;
1472             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1473 
1474             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1475             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1476             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1477          }
1478          {
1479             using T1 = InitializerVector<int,rowVector>;
1480             using T2 = ZeroVector<double,rowVector>;
1481             using RT = DynamicVector<double,rowVector>;
1482             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1483 
1484             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1485             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1486             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1487          }
1488       }
1489    }
1490 
1491    // CompressedVector/...
1492    {
1493       // .../StaticVector
1494       {
1495          {
1496             using T1 = CompressedVector<int,columnVector>;
1497             using T2 = StaticVector<double,3UL,columnVector>;
1498             using RT = StaticVector<double,3UL,columnVector>;
1499             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1500 
1501             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1502             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1503             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1504          }
1505          {
1506             using T1 = CompressedVector<int,rowVector>;
1507             using T2 = StaticVector<double,3UL,rowVector>;
1508             using RT = StaticVector<double,3UL,rowVector>;
1509             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1510 
1511             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1512             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1513             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1514          }
1515       }
1516 
1517       // .../HybridVector
1518       {
1519          {
1520             using T1 = CompressedVector<int,columnVector>;
1521             using T2 = HybridVector<double,7UL,columnVector>;
1522             using RT = HybridVector<double,7UL,columnVector>;
1523             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1524 
1525             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1526             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1527             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1528          }
1529          {
1530             using T1 = CompressedVector<int,rowVector>;
1531             using T2 = HybridVector<double,7UL,rowVector>;
1532             using RT = HybridVector<double,7UL,rowVector>;
1533             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1534 
1535             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1536             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1537             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1538          }
1539       }
1540 
1541       // .../DynamicVector
1542       {
1543          {
1544             using T1 = CompressedVector<int,columnVector>;
1545             using T2 = DynamicVector<double,columnVector>;
1546             using RT = DynamicVector<double,columnVector>;
1547             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1548 
1549             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1550             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1551             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1552          }
1553          {
1554             using T1 = CompressedVector<int,rowVector>;
1555             using T2 = DynamicVector<double,rowVector>;
1556             using RT = DynamicVector<double,rowVector>;
1557             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1558 
1559             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1560             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1561             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1562          }
1563       }
1564 
1565       // .../CustomVector
1566       {
1567          {
1568             using T1 = CompressedVector<int,columnVector>;
1569             using T2 = CustomVector<double,unaligned,unpadded,columnVector>;
1570             using RT = DynamicVector<double,columnVector>;
1571             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1572 
1573             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1574             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1575             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1576          }
1577          {
1578             using T1 = CompressedVector<int,rowVector>;
1579             using T2 = CustomVector<double,unaligned,unpadded,rowVector>;
1580             using RT = DynamicVector<double,rowVector>;
1581             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1582 
1583             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1584             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1585             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1586          }
1587       }
1588 
1589       // .../UniformVector
1590       {
1591          {
1592             using T1 = CompressedVector<int,columnVector>;
1593             using T2 = UniformVector<double,columnVector>;
1594             using RT = DynamicVector<double,columnVector>;
1595             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1596 
1597             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1598             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1599             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1600          }
1601          {
1602             using T1 = CompressedVector<int,rowVector>;
1603             using T2 = UniformVector<double,rowVector>;
1604             using RT = DynamicVector<double,rowVector>;
1605             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1606 
1607             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1608             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1609             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1610          }
1611       }
1612 
1613       // .../InitializerVector
1614       {
1615          {
1616             using T1 = CompressedVector<int,columnVector>;
1617             using T2 = InitializerVector<double,columnVector>;
1618             using RT = DynamicVector<double,columnVector>;
1619             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1620 
1621             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1622             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1623             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1624          }
1625          {
1626             using T1 = CompressedVector<int,rowVector>;
1627             using T2 = InitializerVector<double,rowVector>;
1628             using RT = DynamicVector<double,rowVector>;
1629             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1630 
1631             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1632             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1633             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1634          }
1635       }
1636 
1637       // .../CompressedVector
1638       {
1639          {
1640             using T1 = CompressedVector<int,columnVector>;
1641             using T2 = CompressedVector<double,columnVector>;
1642             using RT = CompressedVector<double,columnVector>;
1643             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1644 
1645             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1646             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1647             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1648          }
1649          {
1650             using T1 = CompressedVector<int,rowVector>;
1651             using T2 = CompressedVector<double,rowVector>;
1652             using RT = CompressedVector<double,rowVector>;
1653             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1654 
1655             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1656             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1657             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1658          }
1659       }
1660 
1661       // .../ZeroVector
1662       {
1663          {
1664             using T1 = CompressedVector<int,columnVector>;
1665             using T2 = ZeroVector<double,columnVector>;
1666             using RT = CompressedVector<double,columnVector>;
1667             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1668 
1669             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1670             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1671             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1672          }
1673          {
1674             using T1 = CompressedVector<int,rowVector>;
1675             using T2 = ZeroVector<double,rowVector>;
1676             using RT = CompressedVector<double,rowVector>;
1677             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1678 
1679             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1680             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1681             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1682          }
1683       }
1684    }
1685 
1686    // ZeroVector/...
1687    {
1688       // .../StaticVector
1689       {
1690          {
1691             using T1 = ZeroVector<int,columnVector>;
1692             using T2 = StaticVector<double,3UL,columnVector>;
1693             using RT = StaticVector<double,3UL,columnVector>;
1694             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1695 
1696             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1697             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1698             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1699          }
1700          {
1701             using T1 = ZeroVector<int,rowVector>;
1702             using T2 = StaticVector<double,3UL,rowVector>;
1703             using RT = StaticVector<double,3UL,rowVector>;
1704             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1705 
1706             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1707             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1708             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1709          }
1710       }
1711 
1712       // .../HybridVector
1713       {
1714          {
1715             using T1 = ZeroVector<int,columnVector>;
1716             using T2 = HybridVector<double,7UL,columnVector>;
1717             using RT = HybridVector<double,7UL,columnVector>;
1718             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1719 
1720             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1721             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1722             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1723          }
1724          {
1725             using T1 = ZeroVector<int,rowVector>;
1726             using T2 = HybridVector<double,7UL,rowVector>;
1727             using RT = HybridVector<double,7UL,rowVector>;
1728             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1729 
1730             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1731             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1732             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1733          }
1734       }
1735 
1736       // .../DynamicVector
1737       {
1738          {
1739             using T1 = ZeroVector<int,columnVector>;
1740             using T2 = DynamicVector<double,columnVector>;
1741             using RT = DynamicVector<double,columnVector>;
1742             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1743 
1744             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1745             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1746             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1747          }
1748          {
1749             using T1 = ZeroVector<int,rowVector>;
1750             using T2 = DynamicVector<double,rowVector>;
1751             using RT = DynamicVector<double,rowVector>;
1752             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1753 
1754             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1755             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1756             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1757          }
1758       }
1759 
1760       // .../CustomVector
1761       {
1762          {
1763             using T1 = ZeroVector<int,columnVector>;
1764             using T2 = CustomVector<double,unaligned,unpadded,columnVector>;
1765             using RT = DynamicVector<double,columnVector>;
1766             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1767 
1768             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1769             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1770             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1771          }
1772          {
1773             using T1 = ZeroVector<int,rowVector>;
1774             using T2 = CustomVector<double,unaligned,unpadded,rowVector>;
1775             using RT = DynamicVector<double,rowVector>;
1776             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1777 
1778             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1779             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1780             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1781          }
1782       }
1783 
1784       // .../UniformVector
1785       {
1786          {
1787             using T1 = ZeroVector<int,columnVector>;
1788             using T2 = UniformVector<double,columnVector>;
1789             using RT = UniformVector<double,columnVector>;
1790             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1791 
1792             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1793             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1794             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1795          }
1796          {
1797             using T1 = ZeroVector<int,rowVector>;
1798             using T2 = UniformVector<double,rowVector>;
1799             using RT = UniformVector<double,rowVector>;
1800             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1801 
1802             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1803             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1804             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1805          }
1806       }
1807 
1808       // .../InitializerVector
1809       {
1810          {
1811             using T1 = ZeroVector<int,columnVector>;
1812             using T2 = InitializerVector<double,columnVector>;
1813             using RT = DynamicVector<double,columnVector>;
1814             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1815 
1816             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1817             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1818             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1819          }
1820          {
1821             using T1 = ZeroVector<int,rowVector>;
1822             using T2 = InitializerVector<double,rowVector>;
1823             using RT = DynamicVector<double,rowVector>;
1824             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1825 
1826             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1827             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1828             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1829          }
1830       }
1831 
1832       // .../CompressedVector
1833       {
1834          {
1835             using T1 = ZeroVector<int,columnVector>;
1836             using T2 = CompressedVector<double,columnVector>;
1837             using RT = CompressedVector<double,columnVector>;
1838             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1839 
1840             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1841             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1842             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1843          }
1844          {
1845             using T1 = ZeroVector<int,rowVector>;
1846             using T2 = CompressedVector<double,rowVector>;
1847             using RT = CompressedVector<double,rowVector>;
1848             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1849 
1850             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1851             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1852             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1853          }
1854       }
1855 
1856       // .../ZeroVector
1857       {
1858          {
1859             using T1 = ZeroVector<int,columnVector>;
1860             using T2 = ZeroVector<double,columnVector>;
1861             using RT = ZeroVector<double,columnVector>;
1862             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1863 
1864             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1865             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1866             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1867          }
1868          {
1869             using T1 = ZeroVector<int,rowVector>;
1870             using T2 = ZeroVector<double,rowVector>;
1871             using RT = ZeroVector<double,rowVector>;
1872             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1873 
1874             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1875             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1876             static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1877          }
1878       }
1879    }
1880 }
1881 //*************************************************************************************************
1882 
1883 
1884 //*************************************************************************************************
1885 /*!\brief Test of the 'AddTrait' class template for matrix/matrix addition operations.
1886 //
1887 // \return void
1888 // \exception std::runtime_error Error detected.
1889 //
1890 // This function performs a compile time test of the 'AddTrait' class template for matrix/matrix
1891 // addition operations. In case an error is detected, a compilation error is created.
1892 */
testMatrixAddition()1893 void ClassTest::testMatrixAddition()
1894 {
1895    using namespace blaze;
1896 
1897 
1898    // StaticMatrix/...
1899    {
1900       // .../StaticMatrix
1901       {
1902          {
1903             using T1 = StaticMatrix<int,3UL,5UL,rowMajor>;
1904             using T2 = StaticMatrix<double,3UL,5UL,rowMajor>;
1905             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
1906             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1907 
1908             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1909             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1910             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
1911          }
1912          {
1913             using T1 = StaticMatrix<int,3UL,5UL,rowMajor>;
1914             using T2 = StaticMatrix<double,3UL,5UL,columnMajor>;
1915             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
1916             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1917 
1918             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1919             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1920             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
1921          }
1922          {
1923             using T1 = StaticMatrix<int,3UL,5UL,columnMajor>;
1924             using T2 = StaticMatrix<double,3UL,5UL,rowMajor>;
1925             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
1926             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1927 
1928             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1929             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1930             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
1931          }
1932          {
1933             using T1 = StaticMatrix<int,3UL,5UL,columnMajor>;
1934             using T2 = StaticMatrix<double,3UL,5UL,columnMajor>;
1935             using RT = StaticMatrix<double,3UL,5UL,columnMajor>;
1936             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1937 
1938             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1939             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1940             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
1941          }
1942       }
1943 
1944       // .../HybridMatrix
1945       {
1946          {
1947             using T1 = StaticMatrix<int,3UL,5UL,rowMajor>;
1948             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
1949             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
1950             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1951 
1952             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1953             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1954             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
1955          }
1956          {
1957             using T1 = StaticMatrix<int,3UL,5UL,rowMajor>;
1958             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
1959             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
1960             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1961 
1962             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1963             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1964             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
1965          }
1966          {
1967             using T1 = StaticMatrix<int,3UL,5UL,columnMajor>;
1968             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
1969             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
1970             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1971 
1972             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1973             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1974             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
1975          }
1976          {
1977             using T1 = StaticMatrix<int,3UL,5UL,columnMajor>;
1978             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
1979             using RT = StaticMatrix<double,3UL,5UL,columnMajor>;
1980             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1981 
1982             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1983             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1984             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
1985          }
1986       }
1987 
1988       // .../DynamicMatrix
1989       {
1990          {
1991             using T1 = StaticMatrix<int,3UL,5UL,rowMajor>;
1992             using T2 = DynamicMatrix<double,rowMajor>;
1993             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
1994             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
1995 
1996             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
1997             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1998             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
1999          }
2000          {
2001             using T1 = StaticMatrix<int,3UL,5UL,rowMajor>;
2002             using T2 = DynamicMatrix<double,columnMajor>;
2003             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2004             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2005 
2006             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2007             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2008             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2009          }
2010          {
2011             using T1 = StaticMatrix<int,3UL,5UL,columnMajor>;
2012             using T2 = DynamicMatrix<double,rowMajor>;
2013             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2014             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2015 
2016             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2017             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2018             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2019          }
2020          {
2021             using T1 = StaticMatrix<int,3UL,5UL,columnMajor>;
2022             using T2 = DynamicMatrix<double,columnMajor>;
2023             using RT = StaticMatrix<double,3UL,5UL,columnMajor>;
2024             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2025 
2026             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2027             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2028             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2029          }
2030       }
2031 
2032       // .../CustomMatrix
2033       {
2034          {
2035             using T1 = StaticMatrix<int,3UL,5UL,rowMajor>;
2036             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
2037             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2038             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2039 
2040             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2041             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2042             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2043          }
2044          {
2045             using T1 = StaticMatrix<int,3UL,5UL,rowMajor>;
2046             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
2047             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2048             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2049 
2050             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2051             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2052             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2053          }
2054          {
2055             using T1 = StaticMatrix<int,3UL,5UL,columnMajor>;
2056             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
2057             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2058             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2059 
2060             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2061             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2062             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2063          }
2064          {
2065             using T1 = StaticMatrix<int,3UL,5UL,columnMajor>;
2066             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
2067             using RT = StaticMatrix<double,3UL,5UL,columnMajor>;
2068             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2069 
2070             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2071             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2072             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2073          }
2074       }
2075 
2076       // .../UniformMatrix
2077       {
2078          {
2079             using T1 = StaticMatrix<int,3UL,5UL,rowMajor>;
2080             using T2 = UniformMatrix<double,rowMajor>;
2081             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2082             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2083 
2084             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2085             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2086             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2087          }
2088          {
2089             using T1 = StaticMatrix<int,3UL,5UL,rowMajor>;
2090             using T2 = UniformMatrix<double,columnMajor>;
2091             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2092             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2093 
2094             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2095             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2096             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2097          }
2098          {
2099             using T1 = StaticMatrix<int,3UL,5UL,columnMajor>;
2100             using T2 = UniformMatrix<double,rowMajor>;
2101             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2102             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2103 
2104             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2105             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2106             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2107          }
2108          {
2109             using T1 = StaticMatrix<int,3UL,5UL,columnMajor>;
2110             using T2 = UniformMatrix<double,columnMajor>;
2111             using RT = StaticMatrix<double,3UL,5UL,columnMajor>;
2112             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2113 
2114             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2115             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2116             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2117          }
2118       }
2119 
2120       // .../InitializerMatrix
2121       {
2122          {
2123             using T1 = StaticMatrix<int,3UL,5UL,rowMajor>;
2124             using T2 = InitializerMatrix<double>;
2125             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2126             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2127 
2128             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2129             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2130             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2131          }
2132          {
2133             using T1 = StaticMatrix<int,3UL,5UL,columnMajor>;
2134             using T2 = InitializerMatrix<double>;
2135             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2136             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2137 
2138             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2139             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2140             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2141          }
2142       }
2143 
2144       // .../CompressedMatrix
2145       {
2146          {
2147             using T1 = StaticMatrix<int,3UL,5UL,rowMajor>;
2148             using T2 = CompressedMatrix<double,rowMajor>;
2149             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2150             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2151 
2152             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2153             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2154             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2155          }
2156          {
2157             using T1 = StaticMatrix<int,3UL,5UL,rowMajor>;
2158             using T2 = CompressedMatrix<double,columnMajor>;
2159             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2160             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2161 
2162             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2163             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2164             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2165          }
2166          {
2167             using T1 = StaticMatrix<int,3UL,5UL,columnMajor>;
2168             using T2 = CompressedMatrix<double,rowMajor>;
2169             using RT = StaticMatrix<double,3UL,5UL,columnMajor>;
2170             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2171 
2172             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2173             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2174             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2175          }
2176          {
2177             using T1 = StaticMatrix<int,3UL,5UL,columnMajor>;
2178             using T2 = CompressedMatrix<double,columnMajor>;
2179             using RT = StaticMatrix<double,3UL,5UL,columnMajor>;
2180             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2181 
2182             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2183             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2184             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2185          }
2186       }
2187 
2188       // .../IdentityMatrix
2189       {
2190          {
2191             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2192             using T2 = IdentityMatrix<double,rowMajor>;
2193             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2194             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2195 
2196             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2197             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2198             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2199          }
2200          {
2201             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2202             using T2 = IdentityMatrix<double,columnMajor>;
2203             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2204             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2205 
2206             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2207             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2208             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2209          }
2210          {
2211             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2212             using T2 = IdentityMatrix<double,rowMajor>;
2213             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2214             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2215 
2216             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2217             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2218             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2219          }
2220          {
2221             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2222             using T2 = IdentityMatrix<double,columnMajor>;
2223             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2224             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2225 
2226             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2227             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2228             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2229          }
2230       }
2231 
2232       // .../ZeroMatrix
2233       {
2234          {
2235             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2236             using T2 = ZeroMatrix<double,rowMajor>;
2237             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2238             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2239 
2240             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2241             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2242             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2243          }
2244          {
2245             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2246             using T2 = ZeroMatrix<double,columnMajor>;
2247             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2248             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2249 
2250             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2251             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2252             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2253          }
2254          {
2255             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2256             using T2 = ZeroMatrix<double,rowMajor>;
2257             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2258             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2259 
2260             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2261             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2262             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2263          }
2264          {
2265             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2266             using T2 = ZeroMatrix<double,columnMajor>;
2267             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2268             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2269 
2270             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2271             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2272             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2273          }
2274       }
2275 
2276       // .../SymmetricMatrix<DynamicMatrix> (real)
2277       {
2278          {
2279             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2280             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
2281             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2282             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2283 
2284             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2285             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2286             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2287          }
2288          {
2289             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2290             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
2291             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2292             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2293 
2294             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2295             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2296             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2297          }
2298          {
2299             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2300             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
2301             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2302             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2303 
2304             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2305             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2306             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2307          }
2308          {
2309             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2310             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
2311             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2312             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2313 
2314             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2315             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2316             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2317          }
2318       }
2319 
2320       // .../SymmetricMatrix<DynamicMatrix> (complex)
2321       {
2322          {
2323             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2324             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
2325             using RT = StaticMatrix<complex<int>,3UL,3UL,rowMajor>;
2326             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2327 
2328             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2329             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2330             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2331          }
2332          {
2333             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2334             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
2335             using RT = StaticMatrix<complex<int>,3UL,3UL,rowMajor>;
2336             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2337 
2338             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2339             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2340             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2341          }
2342          {
2343             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2344             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
2345             using RT = StaticMatrix<complex<int>,3UL,3UL,columnMajor>;
2346             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2347 
2348             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2349             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2350             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2351          }
2352          {
2353             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2354             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
2355             using RT = StaticMatrix<complex<int>,3UL,3UL,columnMajor>;
2356             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2357 
2358             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2359             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2360             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2361          }
2362       }
2363 
2364       // .../SymmetricMatrix<UniformMatrix>
2365       {
2366          {
2367             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2368             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
2369             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2370             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2371 
2372             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2373             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2374             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2375          }
2376          {
2377             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2378             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
2379             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2380             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2381 
2382             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2383             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2384             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2385          }
2386          {
2387             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2388             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
2389             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2390             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2391 
2392             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2393             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2394             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2395          }
2396          {
2397             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2398             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
2399             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2400             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2401 
2402             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2403             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2404             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2405          }
2406       }
2407 
2408       // .../SymmetricMatrix<ZeroMatrix>
2409       {
2410          {
2411             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2412             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
2413             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2414             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2415 
2416             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2417             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2418             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2419          }
2420          {
2421             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2422             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
2423             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2424             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2425 
2426             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2427             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2428             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2429          }
2430          {
2431             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2432             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
2433             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2434             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2435 
2436             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2437             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2438             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2439          }
2440          {
2441             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2442             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
2443             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2444             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2445 
2446             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2447             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2448             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2449          }
2450       }
2451 
2452       // .../HermitianMatrix<DynamicMatrix> (symmetric)
2453       {
2454          {
2455             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2456             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
2457             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2458             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2459 
2460             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2461             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2462             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2463          }
2464          {
2465             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2466             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
2467             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2468             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2469 
2470             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2471             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2472             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2473          }
2474          {
2475             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2476             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
2477             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2478             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2479 
2480             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2481             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2482             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2483          }
2484          {
2485             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2486             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
2487             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2488             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2489 
2490             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2491             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2492             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2493          }
2494       }
2495 
2496       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
2497       {
2498          {
2499             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2500             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
2501             using RT = StaticMatrix<complex<int>,3UL,3UL,rowMajor>;
2502             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2503 
2504             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2505             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2506             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2507          }
2508          {
2509             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2510             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
2511             using RT = StaticMatrix<complex<int>,3UL,3UL,rowMajor>;
2512             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2513 
2514             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2515             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2516             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2517          }
2518          {
2519             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2520             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
2521             using RT = StaticMatrix<complex<int>,3UL,3UL,rowMajor>;
2522             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2523 
2524             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2525             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2526             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2527          }
2528          {
2529             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2530             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
2531             using RT = StaticMatrix<complex<int>,3UL,3UL,columnMajor>;
2532             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2533 
2534             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2535             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2536             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2537          }
2538       }
2539 
2540       // .../LowerMatrix<DynamicMatrix>
2541       {
2542          {
2543             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2544             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
2545             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2546             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2547 
2548             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2549             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2550             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2551          }
2552          {
2553             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2554             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
2555             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2556             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2557 
2558             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2559             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2560             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2561          }
2562          {
2563             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2564             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
2565             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2566             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2567 
2568             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2569             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2570             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2571          }
2572          {
2573             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2574             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
2575             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2576             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2577 
2578             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2579             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2580             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2581          }
2582       }
2583 
2584       // .../UniLowerMatrix<DynamicMatrix>
2585       {
2586          {
2587             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2588             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
2589             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2590             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2591 
2592             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2593             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2594             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2595          }
2596          {
2597             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2598             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
2599             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2600             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2601 
2602             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2603             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2604             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2605          }
2606          {
2607             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2608             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
2609             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2610             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2611 
2612             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2613             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2614             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2615          }
2616          {
2617             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2618             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
2619             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2620             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2621 
2622             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2623             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2624             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2625          }
2626       }
2627 
2628       // .../StrictlyLowerMatrix<DynamicMatrix>
2629       {
2630          {
2631             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2632             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
2633             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2634             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2635 
2636             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2637             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2638             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2639          }
2640          {
2641             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2642             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
2643             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2644             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2645 
2646             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2647             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2648             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2649          }
2650          {
2651             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2652             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
2653             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2654             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2655 
2656             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2657             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2658             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2659          }
2660          {
2661             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2662             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
2663             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2664             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2665 
2666             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2667             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2668             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2669          }
2670       }
2671 
2672       // .../UpperMatrix<DynamicMatrix>
2673       {
2674          {
2675             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2676             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
2677             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2678             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2679 
2680             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2681             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2682             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2683          }
2684          {
2685             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2686             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
2687             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2688             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2689 
2690             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2691             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2692             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2693          }
2694          {
2695             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2696             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
2697             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2698             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2699 
2700             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2701             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2702             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2703          }
2704          {
2705             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2706             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
2707             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2708             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2709 
2710             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2711             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2712             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2713          }
2714       }
2715 
2716       // .../UniUpperMatrix<DynamicMatrix>
2717       {
2718          {
2719             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2720             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
2721             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2722             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2723 
2724             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2725             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2726             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2727          }
2728          {
2729             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2730             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
2731             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2732             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2733 
2734             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2735             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2736             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2737          }
2738          {
2739             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2740             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
2741             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2742             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2743 
2744             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2745             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2746             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2747          }
2748          {
2749             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2750             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
2751             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2752             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2753 
2754             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2755             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2756             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2757          }
2758       }
2759 
2760       // .../StrictlyUpperMatrix<DynamicMatrix>
2761       {
2762          {
2763             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2764             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
2765             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2766             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2767 
2768             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2769             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2770             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2771          }
2772          {
2773             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2774             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
2775             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2776             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2777 
2778             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2779             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2780             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2781          }
2782          {
2783             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2784             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
2785             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2786             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2787 
2788             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2789             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2790             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2791          }
2792          {
2793             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2794             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
2795             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2796             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2797 
2798             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2799             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2800             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2801          }
2802       }
2803 
2804       // .../DiagonalMatrix<DynamicMatrix>
2805       {
2806          {
2807             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2808             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
2809             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2810             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2811 
2812             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2813             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2814             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2815          }
2816          {
2817             using T1 = StaticMatrix<int,3UL,3UL,rowMajor>;
2818             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
2819             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
2820             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2821 
2822             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2823             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2824             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2825          }
2826          {
2827             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2828             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
2829             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2830             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2831 
2832             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2833             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2834             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2835          }
2836          {
2837             using T1 = StaticMatrix<int,3UL,3UL,columnMajor>;
2838             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
2839             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
2840             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2841 
2842             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2843             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2844             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2845          }
2846       }
2847    }
2848 
2849    // HybridMatrix/...
2850    {
2851       // .../StaticMatrix
2852       {
2853          {
2854             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
2855             using T2 = StaticMatrix<double,3UL,5UL,rowMajor>;
2856             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2857             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2858 
2859             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2860             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2861             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2862          }
2863          {
2864             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
2865             using T2 = StaticMatrix<double,3UL,5UL,columnMajor>;
2866             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2867             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2868 
2869             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2870             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2871             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2872          }
2873          {
2874             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
2875             using T2 = StaticMatrix<double,3UL,5UL,rowMajor>;
2876             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
2877             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2878 
2879             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2880             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2881             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2882          }
2883          {
2884             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
2885             using T2 = StaticMatrix<double,3UL,5UL,columnMajor>;
2886             using RT = StaticMatrix<double,3UL,5UL,columnMajor>;
2887             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2888 
2889             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2890             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2891             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2892          }
2893       }
2894 
2895       // .../HybridMatrix
2896       {
2897          {
2898             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
2899             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
2900             using RT = HybridMatrix<double,5UL,6UL,rowMajor>;
2901             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2902 
2903             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2904             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2905             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2906          }
2907          {
2908             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
2909             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
2910             using RT = HybridMatrix<double,5UL,6UL,rowMajor>;
2911             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2912 
2913             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2914             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2915             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2916          }
2917          {
2918             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
2919             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
2920             using RT = HybridMatrix<double,5UL,6UL,rowMajor>;
2921             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2922 
2923             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2924             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2925             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2926          }
2927          {
2928             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
2929             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
2930             using RT = HybridMatrix<double,5UL,6UL,columnMajor>;
2931             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2932 
2933             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2934             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2935             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2936          }
2937       }
2938 
2939       // .../DynamicMatrix
2940       {
2941          {
2942             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
2943             using T2 = DynamicMatrix<double,rowMajor>;
2944             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
2945             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2946 
2947             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2948             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2949             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2950          }
2951          {
2952             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
2953             using T2 = DynamicMatrix<double,columnMajor>;
2954             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
2955             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2956 
2957             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2958             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2959             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2960          }
2961          {
2962             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
2963             using T2 = DynamicMatrix<double,rowMajor>;
2964             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
2965             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2966 
2967             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2968             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2969             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2970          }
2971          {
2972             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
2973             using T2 = DynamicMatrix<double,columnMajor>;
2974             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
2975             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2976 
2977             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2978             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2979             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2980          }
2981       }
2982 
2983       // .../CustomMatrix
2984       {
2985          {
2986             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
2987             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
2988             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
2989             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
2990 
2991             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
2992             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
2993             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
2994          }
2995          {
2996             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
2997             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
2998             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
2999             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3000 
3001             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3002             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3003             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3004          }
3005          {
3006             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3007             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
3008             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3009             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3010 
3011             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3012             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3013             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3014          }
3015          {
3016             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3017             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
3018             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3019             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3020 
3021             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3022             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3023             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3024          }
3025       }
3026 
3027       // .../UniformMatrix
3028       {
3029          {
3030             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3031             using T2 = UniformMatrix<double,rowMajor>;
3032             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3033             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3034 
3035             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3036             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3037             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3038          }
3039          {
3040             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3041             using T2 = UniformMatrix<double,columnMajor>;
3042             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3043             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3044 
3045             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3046             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3047             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3048          }
3049          {
3050             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3051             using T2 = UniformMatrix<double,rowMajor>;
3052             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3053             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3054 
3055             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3056             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3057             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3058          }
3059          {
3060             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3061             using T2 = UniformMatrix<double,columnMajor>;
3062             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3063             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3064 
3065             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3066             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3067             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3068          }
3069       }
3070 
3071       // .../InitializerMatrix
3072       {
3073          {
3074             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3075             using T2 = InitializerMatrix<double>;
3076             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3077             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3078 
3079             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3080             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3081             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3082          }
3083          {
3084             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3085             using T2 = InitializerMatrix<double>;
3086             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3087             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3088 
3089             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3090             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3091             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3092          }
3093       }
3094 
3095       // .../CompressedMatrix
3096       {
3097          {
3098             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3099             using T2 = CompressedMatrix<double,rowMajor>;
3100             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3101             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3102 
3103             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3104             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3105             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3106          }
3107          {
3108             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3109             using T2 = CompressedMatrix<double,columnMajor>;
3110             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3111             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3112 
3113             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3114             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3115             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3116          }
3117          {
3118             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3119             using T2 = CompressedMatrix<double,rowMajor>;
3120             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3121             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3122 
3123             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3124             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3125             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3126          }
3127          {
3128             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3129             using T2 = CompressedMatrix<double,columnMajor>;
3130             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3131             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3132 
3133             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3134             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3135             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3136          }
3137       }
3138 
3139       // .../IdentityMatrix
3140       {
3141          {
3142             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3143             using T2 = IdentityMatrix<double,rowMajor>;
3144             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3145             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3146 
3147             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3148             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3149             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3150          }
3151          {
3152             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3153             using T2 = IdentityMatrix<double,columnMajor>;
3154             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3155             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3156 
3157             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3158             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3159             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3160          }
3161          {
3162             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3163             using T2 = IdentityMatrix<double,rowMajor>;
3164             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3165             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3166 
3167             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3168             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3169             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3170          }
3171          {
3172             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3173             using T2 = IdentityMatrix<double,columnMajor>;
3174             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3175             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3176 
3177             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3178             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3179             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3180          }
3181       }
3182 
3183       // .../ZeroMatrix
3184       {
3185          {
3186             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3187             using T2 = ZeroMatrix<double,rowMajor>;
3188             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3189             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3190 
3191             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3192             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3193             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3194          }
3195          {
3196             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3197             using T2 = ZeroMatrix<double,columnMajor>;
3198             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3199             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3200 
3201             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3202             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3203             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3204          }
3205          {
3206             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3207             using T2 = ZeroMatrix<double,rowMajor>;
3208             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3209             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3210 
3211             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3212             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3213             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3214          }
3215          {
3216             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3217             using T2 = ZeroMatrix<double,columnMajor>;
3218             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3219             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3220 
3221             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3222             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3223             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3224          }
3225       }
3226 
3227       // .../SymmetricMatrix<DynamicMatrix> (real)
3228       {
3229          {
3230             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3231             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
3232             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3233             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3234 
3235             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3236             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3237             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3238          }
3239          {
3240             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3241             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
3242             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3243             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3244 
3245             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3246             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3247             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3248          }
3249          {
3250             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3251             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
3252             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3253             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3254 
3255             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3256             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3257             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3258          }
3259          {
3260             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3261             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
3262             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3263             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3264 
3265             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3266             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3267             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3268          }
3269       }
3270 
3271       // .../SymmetricMatrix<DynamicMatrix> (complex)
3272       {
3273          {
3274             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3275             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
3276             using RT = HybridMatrix<complex<int>,5UL,7UL,rowMajor>;
3277             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3278 
3279             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3280             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3281             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3282          }
3283          {
3284             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3285             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
3286             using RT = HybridMatrix<complex<int>,5UL,7UL,rowMajor>;
3287             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3288 
3289             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3290             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3291             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3292          }
3293          {
3294             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3295             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
3296             using RT = HybridMatrix<complex<int>,5UL,7UL,columnMajor>;
3297             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3298 
3299             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3300             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3301             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3302          }
3303          {
3304             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3305             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
3306             using RT = HybridMatrix<complex<int>,5UL,7UL,columnMajor>;
3307             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3308 
3309             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3310             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3311             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3312          }
3313       }
3314 
3315       // .../SymmetricMatrix<UniformMatrix>
3316       {
3317          {
3318             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3319             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
3320             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3321             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3322 
3323             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3324             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3325             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3326          }
3327          {
3328             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3329             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
3330             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3331             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3332 
3333             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3334             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3335             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3336          }
3337          {
3338             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3339             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
3340             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3341             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3342 
3343             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3344             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3345             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3346          }
3347          {
3348             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3349             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
3350             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3351             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3352 
3353             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3354             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3355             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3356          }
3357       }
3358 
3359       // .../SymmetricMatrix<ZeroMatrix>
3360       {
3361          {
3362             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3363             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
3364             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3365             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3366 
3367             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3368             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3369             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3370          }
3371          {
3372             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3373             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
3374             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3375             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3376 
3377             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3378             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3379             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3380          }
3381          {
3382             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3383             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
3384             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3385             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3386 
3387             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3388             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3389             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3390          }
3391          {
3392             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3393             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
3394             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3395             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3396 
3397             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3398             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3399             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3400          }
3401       }
3402 
3403       // .../HermitianMatrix<DynamicMatrix> (symmetric)
3404       {
3405          {
3406             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3407             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
3408             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3409             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3410 
3411             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3412             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3413             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3414          }
3415          {
3416             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3417             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
3418             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3419             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3420 
3421             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3422             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3423             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3424          }
3425          {
3426             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3427             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
3428             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3429             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3430 
3431             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3432             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3433             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3434          }
3435          {
3436             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3437             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
3438             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3439             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3440 
3441             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3442             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3443             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3444          }
3445       }
3446 
3447       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
3448       {
3449          {
3450             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3451             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
3452             using RT = HybridMatrix<complex<int>,5UL,7UL,rowMajor>;
3453             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3454 
3455             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3456             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3457             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3458          }
3459          {
3460             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3461             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
3462             using RT = HybridMatrix<complex<int>,5UL,7UL,rowMajor>;
3463             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3464 
3465             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3466             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3467             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3468          }
3469          {
3470             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3471             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
3472             using RT = HybridMatrix<complex<int>,5UL,7UL,rowMajor>;
3473             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3474 
3475             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3476             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3477             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3478          }
3479          {
3480             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3481             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
3482             using RT = HybridMatrix<complex<int>,5UL,7UL,columnMajor>;
3483             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3484 
3485             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3486             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3487             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3488          }
3489       }
3490 
3491       // .../LowerMatrix<DynamicMatrix>
3492       {
3493          {
3494             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3495             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
3496             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3497             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3498 
3499             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3500             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3501             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3502          }
3503          {
3504             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3505             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
3506             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3507             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3508 
3509             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3510             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3511             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3512          }
3513          {
3514             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3515             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
3516             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3517             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3518 
3519             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3520             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3521             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3522          }
3523          {
3524             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3525             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
3526             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3527             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3528 
3529             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3530             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3531             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3532          }
3533       }
3534 
3535       // .../UniLowerMatrix<DynamicMatrix>
3536       {
3537          {
3538             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3539             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
3540             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3541             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3542 
3543             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3544             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3545             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3546          }
3547          {
3548             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3549             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
3550             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3551             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3552 
3553             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3554             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3555             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3556          }
3557          {
3558             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3559             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
3560             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3561             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3562 
3563             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3564             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3565             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3566          }
3567          {
3568             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3569             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
3570             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3571             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3572 
3573             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3574             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3575             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3576          }
3577       }
3578 
3579       // .../StrictlyLowerMatrix<DynamicMatrix>
3580       {
3581          {
3582             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3583             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
3584             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3585             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3586 
3587             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3588             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3589             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3590          }
3591          {
3592             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3593             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
3594             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3595             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3596 
3597             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3598             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3599             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3600          }
3601          {
3602             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3603             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
3604             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3605             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3606 
3607             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3608             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3609             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3610          }
3611          {
3612             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3613             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
3614             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3615             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3616 
3617             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3618             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3619             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3620          }
3621       }
3622 
3623       // .../UpperMatrix<DynamicMatrix>
3624       {
3625          {
3626             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3627             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
3628             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3629             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3630 
3631             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3632             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3633             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3634          }
3635          {
3636             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3637             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
3638             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3639             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3640 
3641             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3642             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3643             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3644          }
3645          {
3646             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3647             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
3648             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3649             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3650 
3651             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3652             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3653             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3654          }
3655          {
3656             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3657             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
3658             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3659             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3660 
3661             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3662             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3663             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3664          }
3665       }
3666 
3667       // .../UniUpperMatrix<DynamicMatrix>
3668       {
3669          {
3670             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3671             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
3672             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3673             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3674 
3675             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3676             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3677             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3678          }
3679          {
3680             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3681             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
3682             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3683             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3684 
3685             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3686             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3687             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3688          }
3689          {
3690             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3691             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
3692             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3693             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3694 
3695             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3696             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3697             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3698          }
3699          {
3700             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3701             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
3702             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3703             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3704 
3705             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3706             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3707             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3708          }
3709       }
3710 
3711       // .../StrictlyUpperMatrix<DynamicMatrix>
3712       {
3713          {
3714             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3715             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
3716             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3717             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3718 
3719             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3720             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3721             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3722          }
3723          {
3724             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3725             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
3726             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3727             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3728 
3729             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3730             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3731             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3732          }
3733          {
3734             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3735             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
3736             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3737             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3738 
3739             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3740             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3741             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3742          }
3743          {
3744             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3745             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
3746             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3747             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3748 
3749             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3750             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3751             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3752          }
3753       }
3754 
3755       // .../DiagonalMatrix<DynamicMatrix>
3756       {
3757          {
3758             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3759             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
3760             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3761             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3762 
3763             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3764             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3765             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3766          }
3767          {
3768             using T1 = HybridMatrix<int,5UL,7UL,rowMajor>;
3769             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
3770             using RT = HybridMatrix<double,5UL,7UL,rowMajor>;
3771             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3772 
3773             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3774             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3775             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3776          }
3777          {
3778             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3779             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
3780             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3781             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3782 
3783             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3784             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3785             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3786          }
3787          {
3788             using T1 = HybridMatrix<int,5UL,7UL,columnMajor>;
3789             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
3790             using RT = HybridMatrix<double,5UL,7UL,columnMajor>;
3791             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3792 
3793             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3794             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3795             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3796          }
3797       }
3798    }
3799 
3800    // DynamicMatrix/...
3801    {
3802       // .../StaticMatrix
3803       {
3804          {
3805             using T1 = DynamicMatrix<int,rowMajor>;
3806             using T2 = StaticMatrix<double,3UL,5UL,rowMajor>;
3807             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
3808             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3809 
3810             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3811             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3812             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3813          }
3814          {
3815             using T1 = DynamicMatrix<int,rowMajor>;
3816             using T2 = StaticMatrix<double,3UL,5UL,columnMajor>;
3817             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
3818             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3819 
3820             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3821             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3822             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3823          }
3824          {
3825             using T1 = DynamicMatrix<int,columnMajor>;
3826             using T2 = StaticMatrix<double,3UL,5UL,rowMajor>;
3827             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
3828             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3829 
3830             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3831             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3832             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3833          }
3834          {
3835             using T1 = DynamicMatrix<int,columnMajor>;
3836             using T2 = StaticMatrix<double,3UL,5UL,columnMajor>;
3837             using RT = StaticMatrix<double,3UL,5UL,columnMajor>;
3838             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3839 
3840             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3841             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3842             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3843          }
3844       }
3845 
3846       // .../HybridMatrix
3847       {
3848          {
3849             using T1 = DynamicMatrix<int,rowMajor>;
3850             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
3851             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
3852             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3853 
3854             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3855             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3856             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3857          }
3858          {
3859             using T1 = DynamicMatrix<int,rowMajor>;
3860             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
3861             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
3862             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3863 
3864             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3865             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3866             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3867          }
3868          {
3869             using T1 = DynamicMatrix<int,columnMajor>;
3870             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
3871             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
3872             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3873 
3874             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3875             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3876             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3877          }
3878          {
3879             using T1 = DynamicMatrix<int,columnMajor>;
3880             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
3881             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
3882             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3883 
3884             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3885             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3886             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3887          }
3888       }
3889 
3890       // .../DynamicMatrix
3891       {
3892          {
3893             using T1 = DynamicMatrix<int,rowMajor>;
3894             using T2 = DynamicMatrix<double,rowMajor>;
3895             using RT = DynamicMatrix<double,rowMajor>;
3896             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3897 
3898             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3899             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3900             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3901          }
3902          {
3903             using T1 = DynamicMatrix<int,rowMajor>;
3904             using T2 = DynamicMatrix<double,columnMajor>;
3905             using RT = DynamicMatrix<double,rowMajor>;
3906             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3907 
3908             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3909             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3910             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3911          }
3912          {
3913             using T1 = DynamicMatrix<int,columnMajor>;
3914             using T2 = DynamicMatrix<double,rowMajor>;
3915             using RT = DynamicMatrix<double,rowMajor>;
3916             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3917 
3918             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3919             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3920             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3921          }
3922          {
3923             using T1 = DynamicMatrix<int,columnMajor>;
3924             using T2 = DynamicMatrix<double,columnMajor>;
3925             using RT = DynamicMatrix<double,columnMajor>;
3926             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3927 
3928             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3929             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3930             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3931          }
3932       }
3933 
3934       // .../CustomMatrix
3935       {
3936          {
3937             using T1 = DynamicMatrix<int,rowMajor>;
3938             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
3939             using RT = DynamicMatrix<double,rowMajor>;
3940             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3941 
3942             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3943             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3944             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3945          }
3946          {
3947             using T1 = DynamicMatrix<int,rowMajor>;
3948             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
3949             using RT = DynamicMatrix<double,rowMajor>;
3950             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3951 
3952             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3953             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3954             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3955          }
3956          {
3957             using T1 = DynamicMatrix<int,columnMajor>;
3958             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
3959             using RT = DynamicMatrix<double,rowMajor>;
3960             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3961 
3962             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3963             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3964             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3965          }
3966          {
3967             using T1 = DynamicMatrix<int,columnMajor>;
3968             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
3969             using RT = DynamicMatrix<double,columnMajor>;
3970             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3971 
3972             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3973             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3974             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3975          }
3976       }
3977 
3978       // .../UniformMatrix
3979       {
3980          {
3981             using T1 = DynamicMatrix<int,rowMajor>;
3982             using T2 = UniformMatrix<double,rowMajor>;
3983             using RT = DynamicMatrix<double,rowMajor>;
3984             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3985 
3986             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3987             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3988             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3989          }
3990          {
3991             using T1 = DynamicMatrix<int,rowMajor>;
3992             using T2 = UniformMatrix<double,columnMajor>;
3993             using RT = DynamicMatrix<double,rowMajor>;
3994             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
3995 
3996             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
3997             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
3998             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
3999          }
4000          {
4001             using T1 = DynamicMatrix<int,columnMajor>;
4002             using T2 = UniformMatrix<double,rowMajor>;
4003             using RT = DynamicMatrix<double,rowMajor>;
4004             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4005 
4006             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4007             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4008             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4009          }
4010          {
4011             using T1 = DynamicMatrix<int,columnMajor>;
4012             using T2 = UniformMatrix<double,columnMajor>;
4013             using RT = DynamicMatrix<double,columnMajor>;
4014             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4015 
4016             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4017             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4018             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4019          }
4020       }
4021 
4022       // .../InitializerMatrix
4023       {
4024          {
4025             using T1 = DynamicMatrix<int,rowMajor>;
4026             using T2 = InitializerMatrix<double>;
4027             using RT = DynamicMatrix<double,rowMajor>;
4028             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4029 
4030             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4031             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4032             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4033          }
4034          {
4035             using T1 = DynamicMatrix<int,columnMajor>;
4036             using T2 = InitializerMatrix<double>;
4037             using RT = DynamicMatrix<double,rowMajor>;
4038             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4039 
4040             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4041             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4042             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4043          }
4044       }
4045 
4046       // .../CompressedMatrix
4047       {
4048          {
4049             using T1 = DynamicMatrix<int,rowMajor>;
4050             using T2 = CompressedMatrix<double,rowMajor>;
4051             using RT = DynamicMatrix<double,rowMajor>;
4052             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4053 
4054             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4055             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4056             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4057          }
4058          {
4059             using T1 = DynamicMatrix<int,rowMajor>;
4060             using T2 = CompressedMatrix<double,columnMajor>;
4061             using RT = DynamicMatrix<double,rowMajor>;
4062             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4063 
4064             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4065             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4066             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4067          }
4068          {
4069             using T1 = DynamicMatrix<int,columnMajor>;
4070             using T2 = CompressedMatrix<double,rowMajor>;
4071             using RT = DynamicMatrix<double,columnMajor>;
4072             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4073 
4074             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4075             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4076             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4077          }
4078          {
4079             using T1 = DynamicMatrix<int,columnMajor>;
4080             using T2 = CompressedMatrix<double,columnMajor>;
4081             using RT = DynamicMatrix<double,columnMajor>;
4082             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4083 
4084             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4085             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4086             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4087          }
4088       }
4089 
4090       // .../IdentityMatrix
4091       {
4092          {
4093             using T1 = DynamicMatrix<int,rowMajor>;
4094             using T2 = IdentityMatrix<double,rowMajor>;
4095             using RT = DynamicMatrix<double,rowMajor>;
4096             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4097 
4098             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4099             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4100             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4101          }
4102          {
4103             using T1 = DynamicMatrix<int,rowMajor>;
4104             using T2 = IdentityMatrix<double,columnMajor>;
4105             using RT = DynamicMatrix<double,rowMajor>;
4106             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4107 
4108             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4109             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4110             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4111          }
4112          {
4113             using T1 = DynamicMatrix<int,columnMajor>;
4114             using T2 = IdentityMatrix<double,rowMajor>;
4115             using RT = DynamicMatrix<double,columnMajor>;
4116             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4117 
4118             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4119             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4120             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4121          }
4122          {
4123             using T1 = DynamicMatrix<int,columnMajor>;
4124             using T2 = IdentityMatrix<double,columnMajor>;
4125             using RT = DynamicMatrix<double,columnMajor>;
4126             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4127 
4128             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4129             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4130             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4131          }
4132       }
4133 
4134       // .../ZeroMatrix
4135       {
4136          {
4137             using T1 = DynamicMatrix<int,rowMajor>;
4138             using T2 = ZeroMatrix<double,rowMajor>;
4139             using RT = DynamicMatrix<double,rowMajor>;
4140             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4141 
4142             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4143             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4144             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4145          }
4146          {
4147             using T1 = DynamicMatrix<int,rowMajor>;
4148             using T2 = ZeroMatrix<double,columnMajor>;
4149             using RT = DynamicMatrix<double,rowMajor>;
4150             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4151 
4152             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4153             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4154             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4155          }
4156          {
4157             using T1 = DynamicMatrix<int,columnMajor>;
4158             using T2 = ZeroMatrix<double,rowMajor>;
4159             using RT = DynamicMatrix<double,columnMajor>;
4160             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4161 
4162             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4163             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4164             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4165          }
4166          {
4167             using T1 = DynamicMatrix<int,columnMajor>;
4168             using T2 = ZeroMatrix<double,columnMajor>;
4169             using RT = DynamicMatrix<double,columnMajor>;
4170             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4171 
4172             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4173             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4174             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4175          }
4176       }
4177 
4178       // .../SymmetricMatrix<DynamicMatrix> (real)
4179       {
4180          {
4181             using T1 = DynamicMatrix<int,rowMajor>;
4182             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
4183             using RT = DynamicMatrix<double,rowMajor>;
4184             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4185 
4186             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4187             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4188             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4189          }
4190          {
4191             using T1 = DynamicMatrix<int,rowMajor>;
4192             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
4193             using RT = DynamicMatrix<double,rowMajor>;
4194             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4195 
4196             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4197             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4198             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4199          }
4200          {
4201             using T1 = DynamicMatrix<int,columnMajor>;
4202             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
4203             using RT = DynamicMatrix<double,columnMajor>;
4204             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4205 
4206             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4207             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4208             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4209          }
4210          {
4211             using T1 = DynamicMatrix<int,columnMajor>;
4212             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
4213             using RT = DynamicMatrix<double,columnMajor>;
4214             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4215 
4216             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4217             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4218             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4219          }
4220       }
4221 
4222       // .../SymmetricMatrix<DynamicMatrix> (complex)
4223       {
4224          {
4225             using T1 = DynamicMatrix<int,rowMajor>;
4226             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
4227             using RT = DynamicMatrix<complex<int>,rowMajor>;
4228             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4229 
4230             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4231             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4232             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4233          }
4234          {
4235             using T1 = DynamicMatrix<int,rowMajor>;
4236             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
4237             using RT = DynamicMatrix<complex<int>,rowMajor>;
4238             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4239 
4240             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4241             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4242             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4243          }
4244          {
4245             using T1 = DynamicMatrix<int,columnMajor>;
4246             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
4247             using RT = DynamicMatrix<complex<int>,columnMajor>;
4248             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4249 
4250             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4251             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4252             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4253          }
4254          {
4255             using T1 = DynamicMatrix<int,columnMajor>;
4256             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
4257             using RT = DynamicMatrix<complex<int>,columnMajor>;
4258             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4259 
4260             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4261             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4262             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4263          }
4264       }
4265 
4266       // .../SymmetricMatrix<UniformMatrix>
4267       {
4268          {
4269             using T1 = DynamicMatrix<int,rowMajor>;
4270             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
4271             using RT = DynamicMatrix<double,rowMajor>;
4272             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4273 
4274             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4275             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4276             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4277          }
4278          {
4279             using T1 = DynamicMatrix<int,rowMajor>;
4280             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
4281             using RT = DynamicMatrix<double,rowMajor>;
4282             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4283 
4284             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4285             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4286             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4287          }
4288          {
4289             using T1 = DynamicMatrix<int,columnMajor>;
4290             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
4291             using RT = DynamicMatrix<double,columnMajor>;
4292             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4293 
4294             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4295             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4296             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4297          }
4298          {
4299             using T1 = DynamicMatrix<int,columnMajor>;
4300             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
4301             using RT = DynamicMatrix<double,columnMajor>;
4302             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4303 
4304             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4305             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4306             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4307          }
4308       }
4309 
4310       // .../SymmetricMatrix<ZeroMatrix>
4311       {
4312          {
4313             using T1 = DynamicMatrix<int,rowMajor>;
4314             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
4315             using RT = DynamicMatrix<double,rowMajor>;
4316             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4317 
4318             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4319             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4320             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4321          }
4322          {
4323             using T1 = DynamicMatrix<int,rowMajor>;
4324             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
4325             using RT = DynamicMatrix<double,rowMajor>;
4326             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4327 
4328             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4329             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4330             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4331          }
4332          {
4333             using T1 = DynamicMatrix<int,columnMajor>;
4334             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
4335             using RT = DynamicMatrix<double,columnMajor>;
4336             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4337 
4338             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4339             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4340             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4341          }
4342          {
4343             using T1 = DynamicMatrix<int,columnMajor>;
4344             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
4345             using RT = DynamicMatrix<double,columnMajor>;
4346             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4347 
4348             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4349             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4350             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4351          }
4352       }
4353 
4354       // .../HermitianMatrix<DynamicMatrix> (symmetric)
4355       {
4356          {
4357             using T1 = DynamicMatrix<int,rowMajor>;
4358             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
4359             using RT = DynamicMatrix<double,rowMajor>;
4360             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4361 
4362             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4363             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4364             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4365          }
4366          {
4367             using T1 = DynamicMatrix<int,rowMajor>;
4368             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
4369             using RT = DynamicMatrix<double,rowMajor>;
4370             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4371 
4372             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4373             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4374             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4375          }
4376          {
4377             using T1 = DynamicMatrix<int,columnMajor>;
4378             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
4379             using RT = DynamicMatrix<double,columnMajor>;
4380             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4381 
4382             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4383             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4384             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4385          }
4386          {
4387             using T1 = DynamicMatrix<int,columnMajor>;
4388             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
4389             using RT = DynamicMatrix<double,columnMajor>;
4390             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4391 
4392             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4393             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4394             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4395          }
4396       }
4397 
4398       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
4399       {
4400          {
4401             using T1 = DynamicMatrix<int,rowMajor>;
4402             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
4403             using RT = DynamicMatrix<complex<int>,rowMajor>;
4404             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4405 
4406             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4407             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4408             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4409          }
4410          {
4411             using T1 = DynamicMatrix<int,rowMajor>;
4412             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
4413             using RT = DynamicMatrix<complex<int>,rowMajor>;
4414             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4415 
4416             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4417             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4418             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4419          }
4420          {
4421             using T1 = DynamicMatrix<int,columnMajor>;
4422             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
4423             using RT = DynamicMatrix<complex<int>,rowMajor>;
4424             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4425 
4426             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4427             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4428             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4429          }
4430          {
4431             using T1 = DynamicMatrix<int,columnMajor>;
4432             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
4433             using RT = DynamicMatrix<complex<int>,columnMajor>;
4434             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4435 
4436             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4437             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4438             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4439          }
4440       }
4441 
4442       // .../LowerMatrix<DynamicMatrix>
4443       {
4444          {
4445             using T1 = DynamicMatrix<int,rowMajor>;
4446             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
4447             using RT = DynamicMatrix<double,rowMajor>;
4448             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4449 
4450             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4451             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4452             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4453          }
4454          {
4455             using T1 = DynamicMatrix<int,rowMajor>;
4456             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
4457             using RT = DynamicMatrix<double,rowMajor>;
4458             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4459 
4460             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4461             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4462             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4463          }
4464          {
4465             using T1 = DynamicMatrix<int,columnMajor>;
4466             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
4467             using RT = DynamicMatrix<double,rowMajor>;
4468             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4469 
4470             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4471             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4472             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4473          }
4474          {
4475             using T1 = DynamicMatrix<int,columnMajor>;
4476             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
4477             using RT = DynamicMatrix<double,columnMajor>;
4478             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4479 
4480             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4481             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4482             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4483          }
4484       }
4485 
4486       // .../UniLowerMatrix<DynamicMatrix>
4487       {
4488          {
4489             using T1 = DynamicMatrix<int,rowMajor>;
4490             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
4491             using RT = DynamicMatrix<double,rowMajor>;
4492             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4493 
4494             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4495             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4496             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4497          }
4498          {
4499             using T1 = DynamicMatrix<int,rowMajor>;
4500             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
4501             using RT = DynamicMatrix<double,rowMajor>;
4502             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4503 
4504             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4505             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4506             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4507          }
4508          {
4509             using T1 = DynamicMatrix<int,columnMajor>;
4510             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
4511             using RT = DynamicMatrix<double,rowMajor>;
4512             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4513 
4514             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4515             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4516             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4517          }
4518          {
4519             using T1 = DynamicMatrix<int,columnMajor>;
4520             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
4521             using RT = DynamicMatrix<double,columnMajor>;
4522             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4523 
4524             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4525             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4526             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4527          }
4528       }
4529 
4530       // .../StrictlyLowerMatrix<DynamicMatrix>
4531       {
4532          {
4533             using T1 = DynamicMatrix<int,rowMajor>;
4534             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
4535             using RT = DynamicMatrix<double,rowMajor>;
4536             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4537 
4538             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4539             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4540             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4541          }
4542          {
4543             using T1 = DynamicMatrix<int,rowMajor>;
4544             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
4545             using RT = DynamicMatrix<double,rowMajor>;
4546             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4547 
4548             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4549             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4550             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4551          }
4552          {
4553             using T1 = DynamicMatrix<int,columnMajor>;
4554             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
4555             using RT = DynamicMatrix<double,rowMajor>;
4556             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4557 
4558             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4559             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4560             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4561          }
4562          {
4563             using T1 = DynamicMatrix<int,columnMajor>;
4564             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
4565             using RT = DynamicMatrix<double,columnMajor>;
4566             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4567 
4568             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4569             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4570             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4571          }
4572       }
4573 
4574       // .../UpperMatrix<DynamicMatrix>
4575       {
4576          {
4577             using T1 = DynamicMatrix<int,rowMajor>;
4578             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
4579             using RT = DynamicMatrix<double,rowMajor>;
4580             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4581 
4582             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4583             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4584             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4585          }
4586          {
4587             using T1 = DynamicMatrix<int,rowMajor>;
4588             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
4589             using RT = DynamicMatrix<double,rowMajor>;
4590             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4591 
4592             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4593             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4594             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4595          }
4596          {
4597             using T1 = DynamicMatrix<int,columnMajor>;
4598             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
4599             using RT = DynamicMatrix<double,rowMajor>;
4600             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4601 
4602             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4603             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4604             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4605          }
4606          {
4607             using T1 = DynamicMatrix<int,columnMajor>;
4608             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
4609             using RT = DynamicMatrix<double,columnMajor>;
4610             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4611 
4612             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4613             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4614             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4615          }
4616       }
4617 
4618       // .../UniUpperMatrix<DynamicMatrix>
4619       {
4620          {
4621             using T1 = DynamicMatrix<int,rowMajor>;
4622             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
4623             using RT = DynamicMatrix<double,rowMajor>;
4624             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4625 
4626             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4627             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4628             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4629          }
4630          {
4631             using T1 = DynamicMatrix<int,rowMajor>;
4632             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
4633             using RT = DynamicMatrix<double,rowMajor>;
4634             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4635 
4636             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4637             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4638             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4639          }
4640          {
4641             using T1 = DynamicMatrix<int,columnMajor>;
4642             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
4643             using RT = DynamicMatrix<double,rowMajor>;
4644             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4645 
4646             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4647             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4648             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4649          }
4650          {
4651             using T1 = DynamicMatrix<int,columnMajor>;
4652             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
4653             using RT = DynamicMatrix<double,columnMajor>;
4654             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4655 
4656             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4657             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4658             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4659          }
4660       }
4661 
4662       // .../StrictlyUpperMatrix<DynamicMatrix>
4663       {
4664          {
4665             using T1 = DynamicMatrix<int,rowMajor>;
4666             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
4667             using RT = DynamicMatrix<double,rowMajor>;
4668             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4669 
4670             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4671             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4672             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4673          }
4674          {
4675             using T1 = DynamicMatrix<int,rowMajor>;
4676             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
4677             using RT = DynamicMatrix<double,rowMajor>;
4678             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4679 
4680             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4681             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4682             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4683          }
4684          {
4685             using T1 = DynamicMatrix<int,columnMajor>;
4686             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
4687             using RT = DynamicMatrix<double,rowMajor>;
4688             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4689 
4690             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4691             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4692             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4693          }
4694          {
4695             using T1 = DynamicMatrix<int,columnMajor>;
4696             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
4697             using RT = DynamicMatrix<double,columnMajor>;
4698             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4699 
4700             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4701             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4702             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4703          }
4704       }
4705 
4706       // .../DiagonalMatrix<DynamicMatrix>
4707       {
4708          {
4709             using T1 = DynamicMatrix<int,rowMajor>;
4710             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
4711             using RT = DynamicMatrix<double,rowMajor>;
4712             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4713 
4714             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4715             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4716             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4717          }
4718          {
4719             using T1 = DynamicMatrix<int,rowMajor>;
4720             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
4721             using RT = DynamicMatrix<double,rowMajor>;
4722             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4723 
4724             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4725             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4726             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4727          }
4728          {
4729             using T1 = DynamicMatrix<int,columnMajor>;
4730             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
4731             using RT = DynamicMatrix<double,columnMajor>;
4732             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4733 
4734             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4735             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4736             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4737          }
4738          {
4739             using T1 = DynamicMatrix<int,columnMajor>;
4740             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
4741             using RT = DynamicMatrix<double,columnMajor>;
4742             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4743 
4744             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4745             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4746             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4747          }
4748       }
4749    }
4750 
4751    // CustomMatrix/...
4752    {
4753       // .../StaticMatrix
4754       {
4755          {
4756             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
4757             using T2 = StaticMatrix<double,3UL,5UL,rowMajor>;
4758             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
4759             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4760 
4761             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4762             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4763             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4764          }
4765          {
4766             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
4767             using T2 = StaticMatrix<double,3UL,5UL,columnMajor>;
4768             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
4769             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4770 
4771             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4772             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4773             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4774          }
4775          {
4776             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
4777             using T2 = StaticMatrix<double,3UL,5UL,rowMajor>;
4778             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
4779             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4780 
4781             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4782             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4783             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4784          }
4785          {
4786             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
4787             using T2 = StaticMatrix<double,3UL,5UL,columnMajor>;
4788             using RT = StaticMatrix<double,3UL,5UL,columnMajor>;
4789             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4790 
4791             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4792             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4793             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4794          }
4795       }
4796 
4797       // .../HybridMatrix
4798       {
4799          {
4800             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
4801             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
4802             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
4803             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4804 
4805             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4806             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4807             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4808          }
4809          {
4810             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
4811             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
4812             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
4813             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4814 
4815             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4816             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4817             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4818          }
4819          {
4820             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
4821             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
4822             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
4823             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4824 
4825             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4826             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4827             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4828          }
4829          {
4830             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
4831             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
4832             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
4833             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4834 
4835             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4836             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4837             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4838          }
4839       }
4840 
4841       // .../DynamicMatrix
4842       {
4843          {
4844             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
4845             using T2 = DynamicMatrix<double,rowMajor>;
4846             using RT = DynamicMatrix<double,rowMajor>;
4847             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4848 
4849             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4850             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4851             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4852          }
4853          {
4854             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
4855             using T2 = DynamicMatrix<double,columnMajor>;
4856             using RT = DynamicMatrix<double,rowMajor>;
4857             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4858 
4859             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4860             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4861             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4862          }
4863          {
4864             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
4865             using T2 = DynamicMatrix<double,rowMajor>;
4866             using RT = DynamicMatrix<double,rowMajor>;
4867             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4868 
4869             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4870             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4871             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4872          }
4873          {
4874             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
4875             using T2 = DynamicMatrix<double,columnMajor>;
4876             using RT = DynamicMatrix<double,columnMajor>;
4877             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4878 
4879             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4880             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4881             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4882          }
4883       }
4884 
4885       // .../CustomMatrix
4886       {
4887          {
4888             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
4889             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
4890             using RT = DynamicMatrix<double,rowMajor>;
4891             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4892 
4893             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4894             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4895             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4896          }
4897          {
4898             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
4899             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
4900             using RT = DynamicMatrix<double,rowMajor>;
4901             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4902 
4903             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4904             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4905             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4906          }
4907          {
4908             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
4909             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
4910             using RT = DynamicMatrix<double,rowMajor>;
4911             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4912 
4913             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4914             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4915             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4916          }
4917          {
4918             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
4919             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
4920             using RT = DynamicMatrix<double,columnMajor>;
4921             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4922 
4923             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4924             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4925             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4926          }
4927       }
4928 
4929       // .../UniformMatrix
4930       {
4931          {
4932             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
4933             using T2 = UniformMatrix<double,rowMajor>;
4934             using RT = DynamicMatrix<double,rowMajor>;
4935             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4936 
4937             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4938             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4939             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4940          }
4941          {
4942             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
4943             using T2 = UniformMatrix<double,columnMajor>;
4944             using RT = DynamicMatrix<double,rowMajor>;
4945             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4946 
4947             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4948             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4949             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4950          }
4951          {
4952             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
4953             using T2 = UniformMatrix<double,rowMajor>;
4954             using RT = DynamicMatrix<double,rowMajor>;
4955             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4956 
4957             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4958             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4959             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4960          }
4961          {
4962             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
4963             using T2 = UniformMatrix<double,columnMajor>;
4964             using RT = DynamicMatrix<double,columnMajor>;
4965             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4966 
4967             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4968             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4969             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4970          }
4971       }
4972 
4973       // .../InitializerMatrix
4974       {
4975          {
4976             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
4977             using T2 = InitializerMatrix<double>;
4978             using RT = DynamicMatrix<double,rowMajor>;
4979             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4980 
4981             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4982             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4983             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4984          }
4985          {
4986             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
4987             using T2 = InitializerMatrix<double>;
4988             using RT = DynamicMatrix<double,rowMajor>;
4989             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
4990 
4991             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
4992             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
4993             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
4994          }
4995       }
4996 
4997       // .../CompressedMatrix
4998       {
4999          {
5000             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5001             using T2 = CompressedMatrix<double,rowMajor>;
5002             using RT = DynamicMatrix<double,rowMajor>;
5003             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5004 
5005             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5006             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5007             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5008          }
5009          {
5010             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5011             using T2 = CompressedMatrix<double,columnMajor>;
5012             using RT = DynamicMatrix<double,rowMajor>;
5013             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5014 
5015             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5016             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5017             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5018          }
5019          {
5020             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5021             using T2 = CompressedMatrix<double,rowMajor>;
5022             using RT = DynamicMatrix<double,columnMajor>;
5023             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5024 
5025             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5026             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5027             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5028          }
5029          {
5030             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5031             using T2 = CompressedMatrix<double,columnMajor>;
5032             using RT = DynamicMatrix<double,columnMajor>;
5033             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5034 
5035             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5036             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5037             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5038          }
5039       }
5040 
5041       // .../IdentityMatrix
5042       {
5043          {
5044             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5045             using T2 = IdentityMatrix<double,rowMajor>;
5046             using RT = DynamicMatrix<double,rowMajor>;
5047             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5048 
5049             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5050             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5051             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5052          }
5053          {
5054             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5055             using T2 = IdentityMatrix<double,columnMajor>;
5056             using RT = DynamicMatrix<double,rowMajor>;
5057             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5058 
5059             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5060             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5061             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5062          }
5063          {
5064             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5065             using T2 = IdentityMatrix<double,rowMajor>;
5066             using RT = DynamicMatrix<double,columnMajor>;
5067             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5068 
5069             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5070             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5071             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5072          }
5073          {
5074             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5075             using T2 = IdentityMatrix<double,columnMajor>;
5076             using RT = DynamicMatrix<double,columnMajor>;
5077             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5078 
5079             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5080             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5081             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5082          }
5083       }
5084 
5085       // .../ZeroMatrix
5086       {
5087          {
5088             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5089             using T2 = ZeroMatrix<double,rowMajor>;
5090             using RT = DynamicMatrix<double,rowMajor>;
5091             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5092 
5093             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5094             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5095             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5096          }
5097          {
5098             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5099             using T2 = ZeroMatrix<double,columnMajor>;
5100             using RT = DynamicMatrix<double,rowMajor>;
5101             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5102 
5103             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5104             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5105             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5106          }
5107          {
5108             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5109             using T2 = ZeroMatrix<double,rowMajor>;
5110             using RT = DynamicMatrix<double,columnMajor>;
5111             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5112 
5113             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5114             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5115             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5116          }
5117          {
5118             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5119             using T2 = ZeroMatrix<double,columnMajor>;
5120             using RT = DynamicMatrix<double,columnMajor>;
5121             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5122 
5123             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5124             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5125             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5126          }
5127       }
5128 
5129       // .../SymmetricMatrix<DynamicMatrix> (real)
5130       {
5131          {
5132             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5133             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
5134             using RT = DynamicMatrix<double,rowMajor>;
5135             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5136 
5137             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5138             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5139             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5140          }
5141          {
5142             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5143             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
5144             using RT = DynamicMatrix<double,rowMajor>;
5145             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5146 
5147             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5148             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5149             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5150          }
5151          {
5152             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5153             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
5154             using RT = DynamicMatrix<double,columnMajor>;
5155             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5156 
5157             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5158             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5159             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5160          }
5161          {
5162             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5163             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
5164             using RT = DynamicMatrix<double,columnMajor>;
5165             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5166 
5167             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5168             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5169             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5170          }
5171       }
5172 
5173       // .../SymmetricMatrix<DynamicMatrix> (complex)
5174       {
5175          {
5176             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5177             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
5178             using RT = DynamicMatrix<complex<int>,rowMajor>;
5179             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5180 
5181             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5182             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5183             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5184          }
5185          {
5186             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5187             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
5188             using RT = DynamicMatrix<complex<int>,rowMajor>;
5189             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5190 
5191             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5192             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5193             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5194          }
5195          {
5196             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5197             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
5198             using RT = DynamicMatrix<complex<int>,columnMajor>;
5199             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5200 
5201             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5202             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5203             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5204          }
5205          {
5206             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5207             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
5208             using RT = DynamicMatrix<complex<int>,columnMajor>;
5209             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5210 
5211             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5212             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5213             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5214          }
5215       }
5216 
5217       // .../SymmetricMatrix<UniformMatrix>
5218       {
5219          {
5220             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5221             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
5222             using RT = DynamicMatrix<double,rowMajor>;
5223             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5224 
5225             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5226             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5227             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5228          }
5229          {
5230             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5231             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
5232             using RT = DynamicMatrix<double,rowMajor>;
5233             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5234 
5235             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5236             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5237             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5238          }
5239          {
5240             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5241             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
5242             using RT = DynamicMatrix<double,columnMajor>;
5243             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5244 
5245             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5246             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5247             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5248          }
5249          {
5250             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5251             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
5252             using RT = DynamicMatrix<double,columnMajor>;
5253             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5254 
5255             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5256             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5257             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5258          }
5259       }
5260 
5261       // .../SymmetricMatrix<ZeroMatrix>
5262       {
5263          {
5264             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5265             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
5266             using RT = DynamicMatrix<double,rowMajor>;
5267             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5268 
5269             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5270             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5271             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5272          }
5273          {
5274             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5275             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
5276             using RT = DynamicMatrix<double,rowMajor>;
5277             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5278 
5279             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5280             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5281             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5282          }
5283          {
5284             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5285             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
5286             using RT = DynamicMatrix<double,columnMajor>;
5287             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5288 
5289             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5290             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5291             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5292          }
5293          {
5294             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5295             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
5296             using RT = DynamicMatrix<double,columnMajor>;
5297             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5298 
5299             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5300             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5301             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5302          }
5303       }
5304 
5305       // .../HermitianMatrix<DynamicMatrix> (symmetric)
5306       {
5307          {
5308             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5309             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
5310             using RT = DynamicMatrix<double,rowMajor>;
5311             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5312 
5313             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5314             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5315             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5316          }
5317          {
5318             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5319             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
5320             using RT = DynamicMatrix<double,rowMajor>;
5321             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5322 
5323             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5324             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5325             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5326          }
5327          {
5328             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5329             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
5330             using RT = DynamicMatrix<double,columnMajor>;
5331             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5332 
5333             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5334             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5335             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5336          }
5337          {
5338             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5339             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
5340             using RT = DynamicMatrix<double,columnMajor>;
5341             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5342 
5343             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5344             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5345             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5346          }
5347       }
5348 
5349       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
5350       {
5351          {
5352             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5353             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
5354             using RT = DynamicMatrix<complex<int>,rowMajor>;
5355             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5356 
5357             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5358             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5359             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5360          }
5361          {
5362             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5363             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
5364             using RT = DynamicMatrix<complex<int>,rowMajor>;
5365             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5366 
5367             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5368             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5369             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5370          }
5371          {
5372             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5373             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
5374             using RT = DynamicMatrix<complex<int>,rowMajor>;
5375             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5376 
5377             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5378             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5379             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5380          }
5381          {
5382             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5383             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
5384             using RT = DynamicMatrix<complex<int>,columnMajor>;
5385             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5386 
5387             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5388             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5389             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5390          }
5391       }
5392 
5393       // .../LowerMatrix<DynamicMatrix>
5394       {
5395          {
5396             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5397             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
5398             using RT = DynamicMatrix<double,rowMajor>;
5399             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5400 
5401             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5402             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5403             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5404          }
5405          {
5406             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5407             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
5408             using RT = DynamicMatrix<double,rowMajor>;
5409             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5410 
5411             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5412             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5413             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5414          }
5415          {
5416             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5417             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
5418             using RT = DynamicMatrix<double,rowMajor>;
5419             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5420 
5421             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5422             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5423             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5424          }
5425          {
5426             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5427             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
5428             using RT = DynamicMatrix<double,columnMajor>;
5429             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5430 
5431             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5432             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5433             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5434          }
5435       }
5436 
5437       // .../UniLowerMatrix<DynamicMatrix>
5438       {
5439          {
5440             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5441             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
5442             using RT = DynamicMatrix<double,rowMajor>;
5443             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5444 
5445             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5446             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5447             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5448          }
5449          {
5450             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5451             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
5452             using RT = DynamicMatrix<double,rowMajor>;
5453             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5454 
5455             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5456             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5457             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5458          }
5459          {
5460             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5461             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
5462             using RT = DynamicMatrix<double,rowMajor>;
5463             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5464 
5465             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5466             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5467             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5468          }
5469          {
5470             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5471             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
5472             using RT = DynamicMatrix<double,columnMajor>;
5473             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5474 
5475             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5476             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5477             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5478          }
5479       }
5480 
5481       // .../StrictlyLowerMatrix<DynamicMatrix>
5482       {
5483          {
5484             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5485             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
5486             using RT = DynamicMatrix<double,rowMajor>;
5487             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5488 
5489             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5490             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5491             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5492          }
5493          {
5494             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5495             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
5496             using RT = DynamicMatrix<double,rowMajor>;
5497             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5498 
5499             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5500             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5501             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5502          }
5503          {
5504             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5505             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
5506             using RT = DynamicMatrix<double,rowMajor>;
5507             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5508 
5509             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5510             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5511             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5512          }
5513          {
5514             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5515             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
5516             using RT = DynamicMatrix<double,columnMajor>;
5517             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5518 
5519             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5520             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5521             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5522          }
5523       }
5524 
5525       // .../UpperMatrix<DynamicMatrix>
5526       {
5527          {
5528             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5529             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
5530             using RT = DynamicMatrix<double,rowMajor>;
5531             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5532 
5533             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5534             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5535             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5536          }
5537          {
5538             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5539             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
5540             using RT = DynamicMatrix<double,rowMajor>;
5541             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5542 
5543             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5544             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5545             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5546          }
5547          {
5548             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5549             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
5550             using RT = DynamicMatrix<double,rowMajor>;
5551             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5552 
5553             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5554             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5555             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5556          }
5557          {
5558             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5559             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
5560             using RT = DynamicMatrix<double,columnMajor>;
5561             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5562 
5563             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5564             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5565             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5566          }
5567       }
5568 
5569       // .../UniUpperMatrix<DynamicMatrix>
5570       {
5571          {
5572             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5573             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
5574             using RT = DynamicMatrix<double,rowMajor>;
5575             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5576 
5577             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5578             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5579             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5580          }
5581          {
5582             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5583             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
5584             using RT = DynamicMatrix<double,rowMajor>;
5585             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5586 
5587             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5588             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5589             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5590          }
5591          {
5592             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5593             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
5594             using RT = DynamicMatrix<double,rowMajor>;
5595             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5596 
5597             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5598             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5599             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5600          }
5601          {
5602             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5603             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
5604             using RT = DynamicMatrix<double,columnMajor>;
5605             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5606 
5607             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5608             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5609             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5610          }
5611       }
5612 
5613       // .../StrictlyUpperMatrix<DynamicMatrix>
5614       {
5615          {
5616             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5617             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
5618             using RT = DynamicMatrix<double,rowMajor>;
5619             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5620 
5621             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5622             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5623             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5624          }
5625          {
5626             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5627             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
5628             using RT = DynamicMatrix<double,rowMajor>;
5629             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5630 
5631             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5632             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5633             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5634          }
5635          {
5636             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5637             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
5638             using RT = DynamicMatrix<double,rowMajor>;
5639             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5640 
5641             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5642             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5643             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5644          }
5645          {
5646             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5647             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
5648             using RT = DynamicMatrix<double,columnMajor>;
5649             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5650 
5651             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5652             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5653             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5654          }
5655       }
5656 
5657       // .../DiagonalMatrix<DynamicMatrix>
5658       {
5659          {
5660             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5661             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
5662             using RT = DynamicMatrix<double,rowMajor>;
5663             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5664 
5665             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5666             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5667             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5668          }
5669          {
5670             using T1 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
5671             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
5672             using RT = DynamicMatrix<double,rowMajor>;
5673             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5674 
5675             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5676             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5677             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5678          }
5679          {
5680             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5681             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
5682             using RT = DynamicMatrix<double,columnMajor>;
5683             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5684 
5685             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5686             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5687             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5688          }
5689          {
5690             using T1 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
5691             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
5692             using RT = DynamicMatrix<double,columnMajor>;
5693             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5694 
5695             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5696             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5697             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5698          }
5699       }
5700    }
5701 
5702    // UniformMatrix/...
5703    {
5704       // .../StaticMatrix
5705       {
5706          {
5707             using T1 = UniformMatrix<int,rowMajor>;
5708             using T2 = StaticMatrix<double,3UL,5UL,rowMajor>;
5709             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
5710             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5711 
5712             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5713             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5714             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5715          }
5716          {
5717             using T1 = UniformMatrix<int,rowMajor>;
5718             using T2 = StaticMatrix<double,3UL,5UL,columnMajor>;
5719             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
5720             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5721 
5722             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5723             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5724             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5725          }
5726          {
5727             using T1 = UniformMatrix<int,columnMajor>;
5728             using T2 = StaticMatrix<double,3UL,5UL,rowMajor>;
5729             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
5730             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5731 
5732             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5733             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5734             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5735          }
5736          {
5737             using T1 = UniformMatrix<int,columnMajor>;
5738             using T2 = StaticMatrix<double,3UL,5UL,columnMajor>;
5739             using RT = StaticMatrix<double,3UL,5UL,columnMajor>;
5740             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5741 
5742             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5743             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5744             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5745          }
5746       }
5747 
5748       // .../HybridMatrix
5749       {
5750          {
5751             using T1 = UniformMatrix<int,rowMajor>;
5752             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
5753             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
5754             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5755 
5756             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5757             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5758             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5759          }
5760          {
5761             using T1 = UniformMatrix<int,rowMajor>;
5762             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
5763             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
5764             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5765 
5766             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5767             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5768             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5769          }
5770          {
5771             using T1 = UniformMatrix<int,columnMajor>;
5772             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
5773             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
5774             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5775 
5776             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5777             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5778             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5779          }
5780          {
5781             using T1 = UniformMatrix<int,columnMajor>;
5782             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
5783             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
5784             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5785 
5786             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5787             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5788             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5789          }
5790       }
5791 
5792       // .../DynamicMatrix
5793       {
5794          {
5795             using T1 = UniformMatrix<int,rowMajor>;
5796             using T2 = DynamicMatrix<double,rowMajor>;
5797             using RT = DynamicMatrix<double,rowMajor>;
5798             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5799 
5800             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5801             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5802             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5803          }
5804          {
5805             using T1 = UniformMatrix<int,rowMajor>;
5806             using T2 = DynamicMatrix<double,columnMajor>;
5807             using RT = DynamicMatrix<double,rowMajor>;
5808             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5809 
5810             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5811             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5812             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5813          }
5814          {
5815             using T1 = UniformMatrix<int,columnMajor>;
5816             using T2 = DynamicMatrix<double,rowMajor>;
5817             using RT = DynamicMatrix<double,rowMajor>;
5818             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5819 
5820             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5821             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5822             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5823          }
5824          {
5825             using T1 = UniformMatrix<int,columnMajor>;
5826             using T2 = DynamicMatrix<double,columnMajor>;
5827             using RT = DynamicMatrix<double,columnMajor>;
5828             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5829 
5830             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5831             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5832             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5833          }
5834       }
5835 
5836       // .../CustomMatrix
5837       {
5838          {
5839             using T1 = UniformMatrix<int,rowMajor>;
5840             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
5841             using RT = DynamicMatrix<double,rowMajor>;
5842             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5843 
5844             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5845             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5846             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5847          }
5848          {
5849             using T1 = UniformMatrix<int,rowMajor>;
5850             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
5851             using RT = DynamicMatrix<double,rowMajor>;
5852             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5853 
5854             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5855             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5856             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5857          }
5858          {
5859             using T1 = UniformMatrix<int,columnMajor>;
5860             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
5861             using RT = DynamicMatrix<double,rowMajor>;
5862             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5863 
5864             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5865             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5866             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5867          }
5868          {
5869             using T1 = UniformMatrix<int,columnMajor>;
5870             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
5871             using RT = DynamicMatrix<double,columnMajor>;
5872             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5873 
5874             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5875             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5876             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5877          }
5878       }
5879 
5880       // .../UniformMatrix
5881       {
5882          {
5883             using T1 = UniformMatrix<int,rowMajor>;
5884             using T2 = UniformMatrix<double,rowMajor>;
5885             using RT = UniformMatrix<double,rowMajor>;
5886             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5887 
5888             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5889             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5890             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5891          }
5892          {
5893             using T1 = UniformMatrix<int,rowMajor>;
5894             using T2 = UniformMatrix<double,columnMajor>;
5895             using RT = UniformMatrix<double,rowMajor>;
5896             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5897 
5898             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5899             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5900             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5901          }
5902          {
5903             using T1 = UniformMatrix<int,columnMajor>;
5904             using T2 = UniformMatrix<double,rowMajor>;
5905             using RT = UniformMatrix<double,rowMajor>;
5906             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5907 
5908             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5909             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5910             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5911          }
5912          {
5913             using T1 = UniformMatrix<int,columnMajor>;
5914             using T2 = UniformMatrix<double,columnMajor>;
5915             using RT = UniformMatrix<double,columnMajor>;
5916             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5917 
5918             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5919             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5920             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5921          }
5922       }
5923 
5924       // .../InitializerMatrix
5925       {
5926          {
5927             using T1 = UniformMatrix<int,rowMajor>;
5928             using T2 = InitializerMatrix<double>;
5929             using RT = DynamicMatrix<double,rowMajor>;
5930             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5931 
5932             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5933             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5934             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5935          }
5936          {
5937             using T1 = UniformMatrix<int,columnMajor>;
5938             using T2 = InitializerMatrix<double>;
5939             using RT = DynamicMatrix<double,rowMajor>;
5940             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5941 
5942             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5943             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5944             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5945          }
5946       }
5947 
5948       // .../CompressedMatrix
5949       {
5950          {
5951             using T1 = UniformMatrix<int,rowMajor>;
5952             using T2 = CompressedMatrix<double,rowMajor>;
5953             using RT = DynamicMatrix<double,rowMajor>;
5954             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5955 
5956             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5957             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5958             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5959          }
5960          {
5961             using T1 = UniformMatrix<int,rowMajor>;
5962             using T2 = CompressedMatrix<double,columnMajor>;
5963             using RT = DynamicMatrix<double,rowMajor>;
5964             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5965 
5966             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5967             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5968             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5969          }
5970          {
5971             using T1 = UniformMatrix<int,columnMajor>;
5972             using T2 = CompressedMatrix<double,rowMajor>;
5973             using RT = DynamicMatrix<double,columnMajor>;
5974             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5975 
5976             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5977             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5978             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5979          }
5980          {
5981             using T1 = UniformMatrix<int,columnMajor>;
5982             using T2 = CompressedMatrix<double,columnMajor>;
5983             using RT = DynamicMatrix<double,columnMajor>;
5984             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5985 
5986             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
5987             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
5988             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
5989          }
5990       }
5991 
5992       // .../IdentityMatrix
5993       {
5994          {
5995             using T1 = UniformMatrix<int,rowMajor>;
5996             using T2 = IdentityMatrix<double,rowMajor>;
5997             using RT = DynamicMatrix<double,rowMajor>;
5998             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
5999 
6000             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6001             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6002             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6003          }
6004          {
6005             using T1 = UniformMatrix<int,rowMajor>;
6006             using T2 = IdentityMatrix<double,columnMajor>;
6007             using RT = DynamicMatrix<double,rowMajor>;
6008             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6009 
6010             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6011             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6012             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6013          }
6014          {
6015             using T1 = UniformMatrix<int,columnMajor>;
6016             using T2 = IdentityMatrix<double,rowMajor>;
6017             using RT = DynamicMatrix<double,columnMajor>;
6018             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6019 
6020             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6021             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6022             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6023          }
6024          {
6025             using T1 = UniformMatrix<int,columnMajor>;
6026             using T2 = IdentityMatrix<double,columnMajor>;
6027             using RT = DynamicMatrix<double,columnMajor>;
6028             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6029 
6030             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6031             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6032             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6033          }
6034       }
6035 
6036       // .../ZeroMatrix
6037       {
6038          {
6039             using T1 = UniformMatrix<int,rowMajor>;
6040             using T2 = ZeroMatrix<double,rowMajor>;
6041             using RT = UniformMatrix<double,rowMajor>;
6042             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6043 
6044             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6045             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6046             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6047          }
6048          {
6049             using T1 = UniformMatrix<int,rowMajor>;
6050             using T2 = ZeroMatrix<double,columnMajor>;
6051             using RT = UniformMatrix<double,rowMajor>;
6052             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6053 
6054             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6055             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6056             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6057          }
6058          {
6059             using T1 = UniformMatrix<int,columnMajor>;
6060             using T2 = ZeroMatrix<double,rowMajor>;
6061             using RT = UniformMatrix<double,columnMajor>;
6062             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6063 
6064             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6065             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6066             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6067          }
6068          {
6069             using T1 = UniformMatrix<int,columnMajor>;
6070             using T2 = ZeroMatrix<double,columnMajor>;
6071             using RT = UniformMatrix<double,columnMajor>;
6072             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6073 
6074             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6075             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6076             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6077          }
6078       }
6079 
6080       // .../SymmetricMatrix<DynamicMatrix> (real)
6081       {
6082          {
6083             using T1 = UniformMatrix<int,rowMajor>;
6084             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
6085             using RT = DynamicMatrix<double,rowMajor>;
6086             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6087 
6088             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6089             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6090             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6091          }
6092          {
6093             using T1 = UniformMatrix<int,rowMajor>;
6094             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
6095             using RT = DynamicMatrix<double,rowMajor>;
6096             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6097 
6098             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6099             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6100             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6101          }
6102          {
6103             using T1 = UniformMatrix<int,columnMajor>;
6104             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
6105             using RT = DynamicMatrix<double,columnMajor>;
6106             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6107 
6108             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6109             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6110             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6111          }
6112          {
6113             using T1 = UniformMatrix<int,columnMajor>;
6114             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
6115             using RT = DynamicMatrix<double,columnMajor>;
6116             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6117 
6118             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6119             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6120             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6121          }
6122       }
6123 
6124       // .../SymmetricMatrix<DynamicMatrix> (complex)
6125       {
6126          {
6127             using T1 = UniformMatrix<int,rowMajor>;
6128             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
6129             using RT = DynamicMatrix<complex<int>,rowMajor>;
6130             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6131 
6132             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6133             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6134             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6135          }
6136          {
6137             using T1 = UniformMatrix<int,rowMajor>;
6138             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
6139             using RT = DynamicMatrix<complex<int>,rowMajor>;
6140             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6141 
6142             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6143             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6144             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6145          }
6146          {
6147             using T1 = UniformMatrix<int,columnMajor>;
6148             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
6149             using RT = DynamicMatrix<complex<int>,columnMajor>;
6150             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6151 
6152             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6153             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6154             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6155          }
6156          {
6157             using T1 = UniformMatrix<int,columnMajor>;
6158             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
6159             using RT = DynamicMatrix<complex<int>,columnMajor>;
6160             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6161 
6162             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6163             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6164             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6165          }
6166       }
6167 
6168       // .../SymmetricMatrix<UniformMatrix>
6169       {
6170          {
6171             using T1 = UniformMatrix<int,rowMajor>;
6172             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
6173             using RT = UniformMatrix<double,rowMajor>;
6174             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6175 
6176             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6177             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6178             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6179          }
6180          {
6181             using T1 = UniformMatrix<int,rowMajor>;
6182             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
6183             using RT = UniformMatrix<double,rowMajor>;
6184             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6185 
6186             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6187             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6188             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6189          }
6190          {
6191             using T1 = UniformMatrix<int,columnMajor>;
6192             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
6193             using RT = UniformMatrix<double,columnMajor>;
6194             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6195 
6196             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6197             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6198             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6199          }
6200          {
6201             using T1 = UniformMatrix<int,columnMajor>;
6202             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
6203             using RT = UniformMatrix<double,columnMajor>;
6204             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6205 
6206             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6207             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6208             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6209          }
6210       }
6211 
6212       // .../SymmetricMatrix<ZeroMatrix>
6213       {
6214          {
6215             using T1 = UniformMatrix<int,rowMajor>;
6216             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
6217             using RT = UniformMatrix<double,rowMajor>;
6218             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6219 
6220             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6221             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6222             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6223          }
6224          {
6225             using T1 = UniformMatrix<int,rowMajor>;
6226             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
6227             using RT = UniformMatrix<double,rowMajor>;
6228             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6229 
6230             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6231             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6232             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6233          }
6234          {
6235             using T1 = UniformMatrix<int,columnMajor>;
6236             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
6237             using RT = UniformMatrix<double,columnMajor>;
6238             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6239 
6240             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6241             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6242             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6243          }
6244          {
6245             using T1 = UniformMatrix<int,columnMajor>;
6246             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
6247             using RT = UniformMatrix<double,columnMajor>;
6248             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6249 
6250             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6251             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6252             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6253          }
6254       }
6255 
6256       // .../HermitianMatrix<DynamicMatrix> (symmetric)
6257       {
6258          {
6259             using T1 = UniformMatrix<int,rowMajor>;
6260             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
6261             using RT = DynamicMatrix<double,rowMajor>;
6262             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6263 
6264             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6265             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6266             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6267          }
6268          {
6269             using T1 = UniformMatrix<int,rowMajor>;
6270             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
6271             using RT = DynamicMatrix<double,rowMajor>;
6272             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6273 
6274             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6275             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6276             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6277          }
6278          {
6279             using T1 = UniformMatrix<int,columnMajor>;
6280             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
6281             using RT = DynamicMatrix<double,columnMajor>;
6282             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6283 
6284             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6285             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6286             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6287          }
6288          {
6289             using T1 = UniformMatrix<int,columnMajor>;
6290             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
6291             using RT = DynamicMatrix<double,columnMajor>;
6292             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6293 
6294             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6295             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6296             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6297          }
6298       }
6299 
6300       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
6301       {
6302          {
6303             using T1 = UniformMatrix<int,rowMajor>;
6304             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
6305             using RT = DynamicMatrix<complex<int>,rowMajor>;
6306             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6307 
6308             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6309             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6310             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6311          }
6312          {
6313             using T1 = UniformMatrix<int,rowMajor>;
6314             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
6315             using RT = DynamicMatrix<complex<int>,rowMajor>;
6316             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6317 
6318             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6319             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6320             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6321          }
6322          {
6323             using T1 = UniformMatrix<int,columnMajor>;
6324             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
6325             using RT = DynamicMatrix<complex<int>,rowMajor>;
6326             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6327 
6328             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6329             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6330             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6331          }
6332          {
6333             using T1 = UniformMatrix<int,columnMajor>;
6334             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
6335             using RT = DynamicMatrix<complex<int>,columnMajor>;
6336             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6337 
6338             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6339             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6340             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6341          }
6342       }
6343 
6344       // .../LowerMatrix<DynamicMatrix>
6345       {
6346          {
6347             using T1 = UniformMatrix<int,rowMajor>;
6348             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
6349             using RT = DynamicMatrix<double,rowMajor>;
6350             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6351 
6352             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6353             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6354             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6355          }
6356          {
6357             using T1 = UniformMatrix<int,rowMajor>;
6358             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
6359             using RT = DynamicMatrix<double,rowMajor>;
6360             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6361 
6362             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6363             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6364             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6365          }
6366          {
6367             using T1 = UniformMatrix<int,columnMajor>;
6368             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
6369             using RT = DynamicMatrix<double,rowMajor>;
6370             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6371 
6372             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6373             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6374             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6375          }
6376          {
6377             using T1 = UniformMatrix<int,columnMajor>;
6378             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
6379             using RT = DynamicMatrix<double,columnMajor>;
6380             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6381 
6382             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6383             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6384             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6385          }
6386       }
6387 
6388       // .../UniLowerMatrix<DynamicMatrix>
6389       {
6390          {
6391             using T1 = UniformMatrix<int,rowMajor>;
6392             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
6393             using RT = DynamicMatrix<double,rowMajor>;
6394             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6395 
6396             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6397             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6398             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6399          }
6400          {
6401             using T1 = UniformMatrix<int,rowMajor>;
6402             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
6403             using RT = DynamicMatrix<double,rowMajor>;
6404             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6405 
6406             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6407             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6408             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6409          }
6410          {
6411             using T1 = UniformMatrix<int,columnMajor>;
6412             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
6413             using RT = DynamicMatrix<double,rowMajor>;
6414             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6415 
6416             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6417             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6418             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6419          }
6420          {
6421             using T1 = UniformMatrix<int,columnMajor>;
6422             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
6423             using RT = DynamicMatrix<double,columnMajor>;
6424             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6425 
6426             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6427             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6428             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6429          }
6430       }
6431 
6432       // .../StrictlyLowerMatrix<DynamicMatrix>
6433       {
6434          {
6435             using T1 = UniformMatrix<int,rowMajor>;
6436             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
6437             using RT = DynamicMatrix<double,rowMajor>;
6438             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6439 
6440             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6441             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6442             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6443          }
6444          {
6445             using T1 = UniformMatrix<int,rowMajor>;
6446             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
6447             using RT = DynamicMatrix<double,rowMajor>;
6448             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6449 
6450             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6451             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6452             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6453          }
6454          {
6455             using T1 = UniformMatrix<int,columnMajor>;
6456             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
6457             using RT = DynamicMatrix<double,rowMajor>;
6458             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6459 
6460             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6461             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6462             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6463          }
6464          {
6465             using T1 = UniformMatrix<int,columnMajor>;
6466             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
6467             using RT = DynamicMatrix<double,columnMajor>;
6468             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6469 
6470             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6471             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6472             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6473          }
6474       }
6475 
6476       // .../UpperMatrix<DynamicMatrix>
6477       {
6478          {
6479             using T1 = UniformMatrix<int,rowMajor>;
6480             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
6481             using RT = DynamicMatrix<double,rowMajor>;
6482             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6483 
6484             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6485             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6486             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6487          }
6488          {
6489             using T1 = UniformMatrix<int,rowMajor>;
6490             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
6491             using RT = DynamicMatrix<double,rowMajor>;
6492             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6493 
6494             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6495             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6496             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6497          }
6498          {
6499             using T1 = UniformMatrix<int,columnMajor>;
6500             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
6501             using RT = DynamicMatrix<double,rowMajor>;
6502             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6503 
6504             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6505             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6506             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6507          }
6508          {
6509             using T1 = UniformMatrix<int,columnMajor>;
6510             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
6511             using RT = DynamicMatrix<double,columnMajor>;
6512             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6513 
6514             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6515             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6516             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6517          }
6518       }
6519 
6520       // .../UniUpperMatrix<DynamicMatrix>
6521       {
6522          {
6523             using T1 = UniformMatrix<int,rowMajor>;
6524             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
6525             using RT = DynamicMatrix<double,rowMajor>;
6526             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6527 
6528             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6529             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6530             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6531          }
6532          {
6533             using T1 = UniformMatrix<int,rowMajor>;
6534             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
6535             using RT = DynamicMatrix<double,rowMajor>;
6536             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6537 
6538             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6539             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6540             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6541          }
6542          {
6543             using T1 = UniformMatrix<int,columnMajor>;
6544             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
6545             using RT = DynamicMatrix<double,rowMajor>;
6546             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6547 
6548             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6549             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6550             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6551          }
6552          {
6553             using T1 = UniformMatrix<int,columnMajor>;
6554             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
6555             using RT = DynamicMatrix<double,columnMajor>;
6556             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6557 
6558             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6559             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6560             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6561          }
6562       }
6563 
6564       // .../StrictlyUpperMatrix<DynamicMatrix>
6565       {
6566          {
6567             using T1 = UniformMatrix<int,rowMajor>;
6568             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
6569             using RT = DynamicMatrix<double,rowMajor>;
6570             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6571 
6572             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6573             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6574             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6575          }
6576          {
6577             using T1 = UniformMatrix<int,rowMajor>;
6578             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
6579             using RT = DynamicMatrix<double,rowMajor>;
6580             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6581 
6582             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6583             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6584             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6585          }
6586          {
6587             using T1 = UniformMatrix<int,columnMajor>;
6588             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
6589             using RT = DynamicMatrix<double,rowMajor>;
6590             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6591 
6592             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6593             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6594             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6595          }
6596          {
6597             using T1 = UniformMatrix<int,columnMajor>;
6598             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
6599             using RT = DynamicMatrix<double,columnMajor>;
6600             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6601 
6602             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6603             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6604             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6605          }
6606       }
6607 
6608       // .../DiagonalMatrix<DynamicMatrix>
6609       {
6610          {
6611             using T1 = UniformMatrix<int,rowMajor>;
6612             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
6613             using RT = DynamicMatrix<double,rowMajor>;
6614             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6615 
6616             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6617             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6618             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6619          }
6620          {
6621             using T1 = UniformMatrix<int,rowMajor>;
6622             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
6623             using RT = DynamicMatrix<double,rowMajor>;
6624             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6625 
6626             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6627             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6628             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6629          }
6630          {
6631             using T1 = UniformMatrix<int,columnMajor>;
6632             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
6633             using RT = DynamicMatrix<double,columnMajor>;
6634             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6635 
6636             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6637             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6638             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6639          }
6640          {
6641             using T1 = UniformMatrix<int,columnMajor>;
6642             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
6643             using RT = DynamicMatrix<double,columnMajor>;
6644             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6645 
6646             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6647             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6648             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6649          }
6650       }
6651    }
6652 
6653    // InitializerMatrix/...
6654    {
6655       // .../StaticMatrix
6656       {
6657          {
6658             using T1 = InitializerMatrix<int>;
6659             using T2 = StaticMatrix<double,3UL,5UL,rowMajor>;
6660             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
6661             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6662 
6663             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6664             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6665             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6666          }
6667          {
6668             using T1 = InitializerMatrix<int>;
6669             using T2 = StaticMatrix<double,3UL,5UL,columnMajor>;
6670             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
6671             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6672 
6673             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6674             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6675             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6676          }
6677       }
6678 
6679       // .../HybridMatrix
6680       {
6681          {
6682             using T1 = InitializerMatrix<int>;
6683             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
6684             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
6685             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6686 
6687             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6688             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6689             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6690          }
6691          {
6692             using T1 = InitializerMatrix<int>;
6693             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
6694             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
6695             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6696 
6697             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6698             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6699             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6700          }
6701       }
6702 
6703       // .../DynamicMatrix
6704       {
6705          {
6706             using T1 = InitializerMatrix<int>;
6707             using T2 = DynamicMatrix<double,rowMajor>;
6708             using RT = DynamicMatrix<double,rowMajor>;
6709             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6710 
6711             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6712             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6713             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6714          }
6715          {
6716             using T1 = InitializerMatrix<int>;
6717             using T2 = DynamicMatrix<double,columnMajor>;
6718             using RT = DynamicMatrix<double,rowMajor>;
6719             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6720 
6721             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6722             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6723             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6724          }
6725       }
6726 
6727       // .../CustomMatrix
6728       {
6729          {
6730             using T1 = InitializerMatrix<int>;
6731             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
6732             using RT = DynamicMatrix<double,rowMajor>;
6733             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6734 
6735             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6736             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6737             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6738          }
6739          {
6740             using T1 = InitializerMatrix<int>;
6741             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
6742             using RT = DynamicMatrix<double,rowMajor>;
6743             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6744 
6745             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6746             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6747             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6748          }
6749       }
6750 
6751       // .../UniformMatrix
6752       {
6753          {
6754             using T1 = InitializerMatrix<int>;
6755             using T2 = UniformMatrix<double,rowMajor>;
6756             using RT = DynamicMatrix<double,rowMajor>;
6757             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6758 
6759             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6760             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6761             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6762          }
6763          {
6764             using T1 = InitializerMatrix<int>;
6765             using T2 = UniformMatrix<double,columnMajor>;
6766             using RT = DynamicMatrix<double,rowMajor>;
6767             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6768 
6769             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6770             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6771             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6772          }
6773       }
6774 
6775       // .../InitializerMatrix
6776       {
6777          {
6778             using T1 = InitializerMatrix<int>;
6779             using T2 = InitializerMatrix<double>;
6780             using RT = DynamicMatrix<double,rowMajor>;
6781             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6782 
6783             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6784             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6785             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6786          }
6787       }
6788 
6789       // .../CompressedMatrix
6790       {
6791          {
6792             using T1 = InitializerMatrix<int>;
6793             using T2 = CompressedMatrix<double,rowMajor>;
6794             using RT = DynamicMatrix<double,rowMajor>;
6795             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6796 
6797             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6798             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6799             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6800          }
6801          {
6802             using T1 = InitializerMatrix<int>;
6803             using T2 = CompressedMatrix<double,columnMajor>;
6804             using RT = DynamicMatrix<double,rowMajor>;
6805             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6806 
6807             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6808             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6809             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6810          }
6811       }
6812 
6813       // .../IdentityMatrix
6814       {
6815          {
6816             using T1 = InitializerMatrix<int>;
6817             using T2 = IdentityMatrix<double,rowMajor>;
6818             using RT = DynamicMatrix<double,rowMajor>;
6819             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6820 
6821             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6822             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6823             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6824          }
6825          {
6826             using T1 = InitializerMatrix<int>;
6827             using T2 = IdentityMatrix<double,columnMajor>;
6828             using RT = DynamicMatrix<double,rowMajor>;
6829             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6830 
6831             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6832             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6833             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6834          }
6835       }
6836 
6837       // .../ZeroMatrix
6838       {
6839          {
6840             using T1 = InitializerMatrix<int>;
6841             using T2 = ZeroMatrix<double,rowMajor>;
6842             using RT = DynamicMatrix<double,rowMajor>;
6843             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6844 
6845             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6846             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6847             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6848          }
6849          {
6850             using T1 = InitializerMatrix<int>;
6851             using T2 = ZeroMatrix<double,columnMajor>;
6852             using RT = DynamicMatrix<double,rowMajor>;
6853             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6854 
6855             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6856             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6857             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6858          }
6859       }
6860 
6861       // .../SymmetricMatrix<DynamicMatrix> (real)
6862       {
6863          {
6864             using T1 = InitializerMatrix<int>;
6865             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
6866             using RT = DynamicMatrix<double,rowMajor>;
6867             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6868 
6869             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6870             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6871             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6872          }
6873          {
6874             using T1 = InitializerMatrix<int>;
6875             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
6876             using RT = DynamicMatrix<double,rowMajor>;
6877             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6878 
6879             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6880             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6881             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6882          }
6883       }
6884 
6885       // .../SymmetricMatrix<DynamicMatrix> (complex)
6886       {
6887          {
6888             using T1 = InitializerMatrix<int>;
6889             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
6890             using RT = DynamicMatrix<complex<int>,rowMajor>;
6891             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6892 
6893             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6894             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6895             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6896          }
6897          {
6898             using T1 = InitializerMatrix<int>;
6899             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
6900             using RT = DynamicMatrix<complex<int>,rowMajor>;
6901             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6902 
6903             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6904             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6905             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6906          }
6907       }
6908 
6909       // .../SymmetricMatrix<UniformMatrix>
6910       {
6911          {
6912             using T1 = InitializerMatrix<int>;
6913             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
6914             using RT = DynamicMatrix<double,rowMajor>;
6915             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6916 
6917             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6918             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6919             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6920          }
6921          {
6922             using T1 = InitializerMatrix<int>;
6923             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
6924             using RT = DynamicMatrix<double,rowMajor>;
6925             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6926 
6927             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6928             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6929             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6930          }
6931       }
6932 
6933       // .../SymmetricMatrix<ZeroMatrix>
6934       {
6935          {
6936             using T1 = InitializerMatrix<int>;
6937             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
6938             using RT = DynamicMatrix<double,rowMajor>;
6939             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6940 
6941             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6942             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6943             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6944          }
6945          {
6946             using T1 = InitializerMatrix<int>;
6947             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
6948             using RT = DynamicMatrix<double,rowMajor>;
6949             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6950 
6951             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6952             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6953             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6954          }
6955       }
6956 
6957       // .../HermitianMatrix<DynamicMatrix> (symmetric)
6958       {
6959          {
6960             using T1 = InitializerMatrix<int>;
6961             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
6962             using RT = DynamicMatrix<double,rowMajor>;
6963             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6964 
6965             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6966             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6967             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6968          }
6969          {
6970             using T1 = InitializerMatrix<int>;
6971             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
6972             using RT = DynamicMatrix<double,rowMajor>;
6973             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6974 
6975             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6976             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6977             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6978          }
6979       }
6980 
6981       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
6982       {
6983          {
6984             using T1 = InitializerMatrix<int>;
6985             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
6986             using RT = DynamicMatrix<complex<int>,rowMajor>;
6987             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6988 
6989             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
6990             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
6991             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
6992          }
6993          {
6994             using T1 = InitializerMatrix<int>;
6995             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
6996             using RT = DynamicMatrix<complex<int>,rowMajor>;
6997             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
6998 
6999             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7000             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7001             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7002          }
7003       }
7004 
7005       // .../LowerMatrix<DynamicMatrix>
7006       {
7007          {
7008             using T1 = InitializerMatrix<int>;
7009             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
7010             using RT = DynamicMatrix<double,rowMajor>;
7011             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7012 
7013             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7014             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7015             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7016          }
7017          {
7018             using T1 = InitializerMatrix<int>;
7019             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
7020             using RT = DynamicMatrix<double,rowMajor>;
7021             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7022 
7023             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7024             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7025             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7026          }
7027       }
7028 
7029       // .../UniLowerMatrix<DynamicMatrix>
7030       {
7031          {
7032             using T1 = InitializerMatrix<int>;
7033             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
7034             using RT = DynamicMatrix<double,rowMajor>;
7035             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7036 
7037             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7038             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7039             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7040          }
7041          {
7042             using T1 = InitializerMatrix<int>;
7043             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
7044             using RT = DynamicMatrix<double,rowMajor>;
7045             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7046 
7047             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7048             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7049             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7050          }
7051       }
7052 
7053       // .../StrictlyLowerMatrix<DynamicMatrix>
7054       {
7055          {
7056             using T1 = InitializerMatrix<int>;
7057             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
7058             using RT = DynamicMatrix<double,rowMajor>;
7059             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7060 
7061             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7062             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7063             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7064          }
7065          {
7066             using T1 = InitializerMatrix<int>;
7067             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
7068             using RT = DynamicMatrix<double,rowMajor>;
7069             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7070 
7071             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7072             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7073             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7074          }
7075       }
7076 
7077       // .../UpperMatrix<DynamicMatrix>
7078       {
7079          {
7080             using T1 = InitializerMatrix<int>;
7081             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
7082             using RT = DynamicMatrix<double,rowMajor>;
7083             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7084 
7085             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7086             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7087             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7088          }
7089          {
7090             using T1 = InitializerMatrix<int>;
7091             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
7092             using RT = DynamicMatrix<double,rowMajor>;
7093             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7094 
7095             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7096             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7097             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7098          }
7099       }
7100 
7101       // .../UniUpperMatrix<DynamicMatrix>
7102       {
7103          {
7104             using T1 = InitializerMatrix<int>;
7105             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
7106             using RT = DynamicMatrix<double,rowMajor>;
7107             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7108 
7109             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7110             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7111             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7112          }
7113          {
7114             using T1 = InitializerMatrix<int>;
7115             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
7116             using RT = DynamicMatrix<double,rowMajor>;
7117             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7118 
7119             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7120             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7121             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7122          }
7123       }
7124 
7125       // .../StrictlyUpperMatrix<DynamicMatrix>
7126       {
7127          {
7128             using T1 = InitializerMatrix<int>;
7129             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
7130             using RT = DynamicMatrix<double,rowMajor>;
7131             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7132 
7133             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7134             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7135             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7136          }
7137          {
7138             using T1 = InitializerMatrix<int>;
7139             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
7140             using RT = DynamicMatrix<double,rowMajor>;
7141             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7142 
7143             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7144             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7145             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7146          }
7147       }
7148 
7149       // .../DiagonalMatrix<DynamicMatrix>
7150       {
7151          {
7152             using T1 = InitializerMatrix<int>;
7153             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
7154             using RT = DynamicMatrix<double,rowMajor>;
7155             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7156 
7157             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7158             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7159             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7160          }
7161          {
7162             using T1 = InitializerMatrix<int>;
7163             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
7164             using RT = DynamicMatrix<double,rowMajor>;
7165             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7166 
7167             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7168             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7169             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7170          }
7171       }
7172    }
7173 
7174    // CompressedMatrix/...
7175    {
7176       // .../StaticMatrix
7177       {
7178          {
7179             using T1 = CompressedMatrix<int,rowMajor>;
7180             using T2 = StaticMatrix<double,3UL,5UL,rowMajor>;
7181             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
7182             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7183 
7184             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7185             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7186             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7187          }
7188          {
7189             using T1 = CompressedMatrix<int,rowMajor>;
7190             using T2 = StaticMatrix<double,3UL,5UL,columnMajor>;
7191             using RT = StaticMatrix<double,3UL,5UL,columnMajor>;
7192             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7193 
7194             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7195             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7196             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7197          }
7198          {
7199             using T1 = CompressedMatrix<int,columnMajor>;
7200             using T2 = StaticMatrix<double,3UL,5UL,rowMajor>;
7201             using RT = StaticMatrix<double,3UL,5UL,rowMajor>;
7202             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7203 
7204             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7205             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7206             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7207          }
7208          {
7209             using T1 = CompressedMatrix<int,columnMajor>;
7210             using T2 = StaticMatrix<double,3UL,5UL,columnMajor>;
7211             using RT = StaticMatrix<double,3UL,5UL,columnMajor>;
7212             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7213 
7214             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7215             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7216             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7217          }
7218       }
7219 
7220       // .../HybridMatrix
7221       {
7222          {
7223             using T1 = CompressedMatrix<int,rowMajor>;
7224             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
7225             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
7226             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7227 
7228             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7229             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7230             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7231          }
7232          {
7233             using T1 = CompressedMatrix<int,rowMajor>;
7234             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
7235             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
7236             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7237 
7238             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7239             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7240             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7241          }
7242          {
7243             using T1 = CompressedMatrix<int,columnMajor>;
7244             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
7245             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
7246             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7247 
7248             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7249             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7250             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7251          }
7252          {
7253             using T1 = CompressedMatrix<int,columnMajor>;
7254             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
7255             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
7256             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7257 
7258             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7259             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7260             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7261          }
7262       }
7263 
7264       // .../DynamicMatrix
7265       {
7266          {
7267             using T1 = CompressedMatrix<int,rowMajor>;
7268             using T2 = DynamicMatrix<double,rowMajor>;
7269             using RT = DynamicMatrix<double,rowMajor>;
7270             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7271 
7272             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7273             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7274             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7275          }
7276          {
7277             using T1 = CompressedMatrix<int,rowMajor>;
7278             using T2 = DynamicMatrix<double,columnMajor>;
7279             using RT = DynamicMatrix<double,columnMajor>;
7280             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7281 
7282             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7283             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7284             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7285          }
7286          {
7287             using T1 = CompressedMatrix<int,columnMajor>;
7288             using T2 = DynamicMatrix<double,rowMajor>;
7289             using RT = DynamicMatrix<double,rowMajor>;
7290             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7291 
7292             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7293             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7294             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7295          }
7296          {
7297             using T1 = CompressedMatrix<int,columnMajor>;
7298             using T2 = DynamicMatrix<double,columnMajor>;
7299             using RT = DynamicMatrix<double,columnMajor>;
7300             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7301 
7302             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7303             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7304             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7305          }
7306       }
7307 
7308       // .../CustomMatrix
7309       {
7310          {
7311             using T1 = CompressedMatrix<int,rowMajor>;
7312             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
7313             using RT = DynamicMatrix<double,rowMajor>;
7314             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7315 
7316             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7317             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7318             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7319          }
7320          {
7321             using T1 = CompressedMatrix<int,rowMajor>;
7322             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
7323             using RT = DynamicMatrix<double,columnMajor>;
7324             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7325 
7326             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7327             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7328             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7329          }
7330          {
7331             using T1 = CompressedMatrix<int,columnMajor>;
7332             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
7333             using RT = DynamicMatrix<double,rowMajor>;
7334             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7335 
7336             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7337             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7338             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7339          }
7340          {
7341             using T1 = CompressedMatrix<int,columnMajor>;
7342             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
7343             using RT = DynamicMatrix<double,columnMajor>;
7344             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7345 
7346             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7347             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7348             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7349          }
7350       }
7351 
7352       // .../UniformMatrix
7353       {
7354          {
7355             using T1 = CompressedMatrix<int,rowMajor>;
7356             using T2 = UniformMatrix<double,rowMajor>;
7357             using RT = DynamicMatrix<double,rowMajor>;
7358             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7359 
7360             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7361             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7362             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7363          }
7364          {
7365             using T1 = CompressedMatrix<int,rowMajor>;
7366             using T2 = UniformMatrix<double,columnMajor>;
7367             using RT = DynamicMatrix<double,columnMajor>;
7368             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7369 
7370             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7371             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7372             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7373          }
7374          {
7375             using T1 = CompressedMatrix<int,columnMajor>;
7376             using T2 = UniformMatrix<double,rowMajor>;
7377             using RT = DynamicMatrix<double,rowMajor>;
7378             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7379 
7380             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7381             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7382             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7383          }
7384          {
7385             using T1 = CompressedMatrix<int,columnMajor>;
7386             using T2 = UniformMatrix<double,columnMajor>;
7387             using RT = DynamicMatrix<double,columnMajor>;
7388             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7389 
7390             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7391             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7392             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7393          }
7394       }
7395 
7396       // .../InitializerMatrix
7397       {
7398          {
7399             using T1 = CompressedMatrix<int,rowMajor>;
7400             using T2 = InitializerMatrix<double>;
7401             using RT = DynamicMatrix<double,rowMajor>;
7402             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7403 
7404             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7405             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7406             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7407          }
7408          {
7409             using T1 = CompressedMatrix<int,columnMajor>;
7410             using T2 = InitializerMatrix<double>;
7411             using RT = DynamicMatrix<double,rowMajor>;
7412             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7413 
7414             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7415             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7416             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7417          }
7418       }
7419 
7420       // .../CompressedMatrix
7421       {
7422          {
7423             using T1 = CompressedMatrix<int,rowMajor>;
7424             using T2 = CompressedMatrix<double,rowMajor>;
7425             using RT = CompressedMatrix<double,rowMajor>;
7426             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7427 
7428             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7429             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7430             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7431          }
7432          {
7433             using T1 = CompressedMatrix<int,rowMajor>;
7434             using T2 = CompressedMatrix<double,columnMajor>;
7435             using RT = CompressedMatrix<double,rowMajor>;
7436             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7437 
7438             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7439             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7440             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7441          }
7442          {
7443             using T1 = CompressedMatrix<int,columnMajor>;
7444             using T2 = CompressedMatrix<double,rowMajor>;
7445             using RT = CompressedMatrix<double,rowMajor>;
7446             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7447 
7448             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7449             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7450             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7451          }
7452          {
7453             using T1 = CompressedMatrix<int,columnMajor>;
7454             using T2 = CompressedMatrix<double,columnMajor>;
7455             using RT = CompressedMatrix<double,columnMajor>;
7456             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7457 
7458             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7459             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7460             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7461          }
7462       }
7463 
7464       // .../IdentityMatrix
7465       {
7466          {
7467             using T1 = CompressedMatrix<int,rowMajor>;
7468             using T2 = IdentityMatrix<double,rowMajor>;
7469             using RT = CompressedMatrix<double,rowMajor>;
7470             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7471 
7472             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7473             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7474             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7475          }
7476          {
7477             using T1 = CompressedMatrix<int,rowMajor>;
7478             using T2 = IdentityMatrix<double,columnMajor>;
7479             using RT = CompressedMatrix<double,rowMajor>;
7480             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7481 
7482             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7483             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7484             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7485          }
7486          {
7487             using T1 = CompressedMatrix<int,columnMajor>;
7488             using T2 = IdentityMatrix<double,rowMajor>;
7489             using RT = CompressedMatrix<double,rowMajor>;
7490             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7491 
7492             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7493             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7494             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7495          }
7496          {
7497             using T1 = CompressedMatrix<int,columnMajor>;
7498             using T2 = IdentityMatrix<double,columnMajor>;
7499             using RT = CompressedMatrix<double,columnMajor>;
7500             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7501 
7502             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7503             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7504             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7505          }
7506       }
7507 
7508       // .../ZeroMatrix
7509       {
7510          {
7511             using T1 = CompressedMatrix<int,rowMajor>;
7512             using T2 = ZeroMatrix<double,rowMajor>;
7513             using RT = CompressedMatrix<double,rowMajor>;
7514             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7515 
7516             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7517             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7518             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7519          }
7520          {
7521             using T1 = CompressedMatrix<int,rowMajor>;
7522             using T2 = ZeroMatrix<double,columnMajor>;
7523             using RT = CompressedMatrix<double,rowMajor>;
7524             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7525 
7526             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7527             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7528             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7529          }
7530          {
7531             using T1 = CompressedMatrix<int,columnMajor>;
7532             using T2 = ZeroMatrix<double,rowMajor>;
7533             using RT = CompressedMatrix<double,columnMajor>;
7534             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7535 
7536             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7537             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7538             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7539          }
7540          {
7541             using T1 = CompressedMatrix<int,columnMajor>;
7542             using T2 = ZeroMatrix<double,columnMajor>;
7543             using RT = CompressedMatrix<double,columnMajor>;
7544             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7545 
7546             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7547             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7548             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7549          }
7550       }
7551 
7552       // .../SymmetricMatrix<DynamicMatrix> (real)
7553       {
7554          {
7555             using T1 = CompressedMatrix<int,rowMajor>;
7556             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
7557             using RT = DynamicMatrix<double,rowMajor>;
7558             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7559 
7560             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7561             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7562             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7563          }
7564          {
7565             using T1 = CompressedMatrix<int,rowMajor>;
7566             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
7567             using RT = DynamicMatrix<double,columnMajor>;
7568             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7569 
7570             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7571             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7572             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7573          }
7574          {
7575             using T1 = CompressedMatrix<int,columnMajor>;
7576             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
7577             using RT = DynamicMatrix<double,rowMajor>;
7578             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7579 
7580             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7581             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7582             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7583          }
7584          {
7585             using T1 = CompressedMatrix<int,columnMajor>;
7586             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
7587             using RT = DynamicMatrix<double,columnMajor>;
7588             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7589 
7590             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7591             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7592             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7593          }
7594       }
7595 
7596       // .../SymmetricMatrix<DynamicMatrix> (complex)
7597       {
7598          {
7599             using T1 = CompressedMatrix<int,rowMajor>;
7600             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
7601             using RT = DynamicMatrix<complex<int>,rowMajor>;
7602             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7603 
7604             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7605             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7606             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7607          }
7608          {
7609             using T1 = CompressedMatrix<int,rowMajor>;
7610             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
7611             using RT = DynamicMatrix<complex<int>,columnMajor>;
7612             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7613 
7614             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7615             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7616             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7617          }
7618          {
7619             using T1 = CompressedMatrix<int,columnMajor>;
7620             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
7621             using RT = DynamicMatrix<complex<int>,rowMajor>;
7622             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7623 
7624             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7625             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7626             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7627          }
7628          {
7629             using T1 = CompressedMatrix<int,columnMajor>;
7630             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
7631             using RT = DynamicMatrix<complex<int>,columnMajor>;
7632             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7633 
7634             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7635             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7636             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7637          }
7638       }
7639 
7640       // .../SymmetricMatrix<UniformMatrix>
7641       {
7642          {
7643             using T1 = CompressedMatrix<int,rowMajor>;
7644             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
7645             using RT = DynamicMatrix<double,rowMajor>;
7646             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7647 
7648             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7649             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7650             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7651          }
7652          {
7653             using T1 = CompressedMatrix<int,rowMajor>;
7654             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
7655             using RT = DynamicMatrix<double,columnMajor>;
7656             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7657 
7658             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7659             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7660             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7661          }
7662          {
7663             using T1 = CompressedMatrix<int,columnMajor>;
7664             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
7665             using RT = DynamicMatrix<double,rowMajor>;
7666             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7667 
7668             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7669             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7670             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7671          }
7672          {
7673             using T1 = CompressedMatrix<int,columnMajor>;
7674             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
7675             using RT = DynamicMatrix<double,columnMajor>;
7676             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7677 
7678             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7679             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7680             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7681          }
7682       }
7683 
7684       // .../SymmetricMatrix<ZeroMatrix>
7685       {
7686          {
7687             using T1 = CompressedMatrix<int,rowMajor>;
7688             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
7689             using RT = CompressedMatrix<double,rowMajor>;
7690             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7691 
7692             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7693             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7694             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7695          }
7696          {
7697             using T1 = CompressedMatrix<int,rowMajor>;
7698             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
7699             using RT = CompressedMatrix<double,rowMajor>;
7700             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7701 
7702             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7703             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7704             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7705          }
7706          {
7707             using T1 = CompressedMatrix<int,columnMajor>;
7708             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
7709             using RT = CompressedMatrix<double,columnMajor>;
7710             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7711 
7712             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7713             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7714             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7715          }
7716          {
7717             using T1 = CompressedMatrix<int,columnMajor>;
7718             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
7719             using RT = CompressedMatrix<double,columnMajor>;
7720             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7721 
7722             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7723             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7724             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7725          }
7726       }
7727 
7728       // .../HermitianMatrix<DynamicMatrix> (symmetric)
7729       {
7730          {
7731             using T1 = CompressedMatrix<int,rowMajor>;
7732             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
7733             using RT = DynamicMatrix<double,rowMajor>;
7734             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7735 
7736             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7737             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7738             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7739          }
7740          {
7741             using T1 = CompressedMatrix<int,rowMajor>;
7742             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
7743             using RT = DynamicMatrix<double,columnMajor>;
7744             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7745 
7746             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7747             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7748             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7749          }
7750          {
7751             using T1 = CompressedMatrix<int,columnMajor>;
7752             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
7753             using RT = DynamicMatrix<double,rowMajor>;
7754             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7755 
7756             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7757             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7758             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7759          }
7760          {
7761             using T1 = CompressedMatrix<int,columnMajor>;
7762             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
7763             using RT = DynamicMatrix<double,columnMajor>;
7764             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7765 
7766             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7767             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7768             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7769          }
7770       }
7771 
7772       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
7773       {
7774          {
7775             using T1 = CompressedMatrix<int,rowMajor>;
7776             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
7777             using RT = DynamicMatrix<complex<int>,rowMajor>;
7778             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7779 
7780             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7781             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7782             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7783          }
7784          {
7785             using T1 = CompressedMatrix<int,rowMajor>;
7786             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
7787             using RT = DynamicMatrix<complex<int>,columnMajor>;
7788             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7789 
7790             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7791             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7792             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7793          }
7794          {
7795             using T1 = CompressedMatrix<int,columnMajor>;
7796             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
7797             using RT = DynamicMatrix<complex<int>,rowMajor>;
7798             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7799 
7800             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7801             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7802             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7803          }
7804          {
7805             using T1 = CompressedMatrix<int,columnMajor>;
7806             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
7807             using RT = DynamicMatrix<complex<int>,columnMajor>;
7808             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7809 
7810             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7811             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7812             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7813          }
7814       }
7815 
7816       // .../LowerMatrix<DynamicMatrix>
7817       {
7818          {
7819             using T1 = CompressedMatrix<int,rowMajor>;
7820             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
7821             using RT = DynamicMatrix<double,rowMajor>;
7822             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7823 
7824             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7825             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7826             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7827          }
7828          {
7829             using T1 = CompressedMatrix<int,rowMajor>;
7830             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
7831             using RT = DynamicMatrix<double,columnMajor>;
7832             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7833 
7834             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7835             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7836             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7837          }
7838          {
7839             using T1 = CompressedMatrix<int,columnMajor>;
7840             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
7841             using RT = DynamicMatrix<double,rowMajor>;
7842             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7843 
7844             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7845             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7846             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7847          }
7848          {
7849             using T1 = CompressedMatrix<int,columnMajor>;
7850             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
7851             using RT = DynamicMatrix<double,columnMajor>;
7852             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7853 
7854             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7855             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7856             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7857          }
7858       }
7859 
7860       // .../UniLowerMatrix<DynamicMatrix>
7861       {
7862          {
7863             using T1 = CompressedMatrix<int,rowMajor>;
7864             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
7865             using RT = DynamicMatrix<double,rowMajor>;
7866             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7867 
7868             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7869             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7870             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7871          }
7872          {
7873             using T1 = CompressedMatrix<int,rowMajor>;
7874             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
7875             using RT = DynamicMatrix<double,columnMajor>;
7876             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7877 
7878             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7879             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7880             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7881          }
7882          {
7883             using T1 = CompressedMatrix<int,columnMajor>;
7884             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
7885             using RT = DynamicMatrix<double,rowMajor>;
7886             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7887 
7888             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7889             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7890             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7891          }
7892          {
7893             using T1 = CompressedMatrix<int,columnMajor>;
7894             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
7895             using RT = DynamicMatrix<double,columnMajor>;
7896             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7897 
7898             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7899             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7900             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7901          }
7902       }
7903 
7904       // .../StrictlyLowerMatrix<DynamicMatrix>
7905       {
7906          {
7907             using T1 = CompressedMatrix<int,rowMajor>;
7908             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
7909             using RT = DynamicMatrix<double,rowMajor>;
7910             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7911 
7912             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7913             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7914             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7915          }
7916          {
7917             using T1 = CompressedMatrix<int,rowMajor>;
7918             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
7919             using RT = DynamicMatrix<double,columnMajor>;
7920             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7921 
7922             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7923             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7924             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7925          }
7926          {
7927             using T1 = CompressedMatrix<int,columnMajor>;
7928             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
7929             using RT = DynamicMatrix<double,rowMajor>;
7930             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7931 
7932             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7933             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7934             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7935          }
7936          {
7937             using T1 = CompressedMatrix<int,columnMajor>;
7938             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
7939             using RT = DynamicMatrix<double,columnMajor>;
7940             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7941 
7942             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7943             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7944             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7945          }
7946       }
7947 
7948       // .../UpperMatrix<DynamicMatrix>
7949       {
7950          {
7951             using T1 = CompressedMatrix<int,rowMajor>;
7952             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
7953             using RT = DynamicMatrix<double,rowMajor>;
7954             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7955 
7956             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7957             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7958             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7959          }
7960          {
7961             using T1 = CompressedMatrix<int,rowMajor>;
7962             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
7963             using RT = DynamicMatrix<double,columnMajor>;
7964             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7965 
7966             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7967             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7968             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7969          }
7970          {
7971             using T1 = CompressedMatrix<int,columnMajor>;
7972             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
7973             using RT = DynamicMatrix<double,rowMajor>;
7974             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7975 
7976             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7977             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7978             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7979          }
7980          {
7981             using T1 = CompressedMatrix<int,columnMajor>;
7982             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
7983             using RT = DynamicMatrix<double,columnMajor>;
7984             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7985 
7986             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
7987             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
7988             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
7989          }
7990       }
7991 
7992       // .../UniUpperMatrix<DynamicMatrix>
7993       {
7994          {
7995             using T1 = CompressedMatrix<int,rowMajor>;
7996             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
7997             using RT = DynamicMatrix<double,rowMajor>;
7998             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
7999 
8000             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8001             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8002             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8003          }
8004          {
8005             using T1 = CompressedMatrix<int,rowMajor>;
8006             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
8007             using RT = DynamicMatrix<double,columnMajor>;
8008             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8009 
8010             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8011             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8012             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8013          }
8014          {
8015             using T1 = CompressedMatrix<int,columnMajor>;
8016             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
8017             using RT = DynamicMatrix<double,rowMajor>;
8018             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8019 
8020             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8021             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8022             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8023          }
8024          {
8025             using T1 = CompressedMatrix<int,columnMajor>;
8026             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
8027             using RT = DynamicMatrix<double,columnMajor>;
8028             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8029 
8030             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8031             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8032             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8033          }
8034       }
8035 
8036       // .../StrictlyUpperMatrix<DynamicMatrix>
8037       {
8038          {
8039             using T1 = CompressedMatrix<int,rowMajor>;
8040             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
8041             using RT = DynamicMatrix<double,rowMajor>;
8042             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8043 
8044             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8045             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8046             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8047          }
8048          {
8049             using T1 = CompressedMatrix<int,rowMajor>;
8050             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
8051             using RT = DynamicMatrix<double,columnMajor>;
8052             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8053 
8054             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8055             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8056             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8057          }
8058          {
8059             using T1 = CompressedMatrix<int,columnMajor>;
8060             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
8061             using RT = DynamicMatrix<double,rowMajor>;
8062             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8063 
8064             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8065             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8066             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8067          }
8068          {
8069             using T1 = CompressedMatrix<int,columnMajor>;
8070             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
8071             using RT = DynamicMatrix<double,columnMajor>;
8072             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8073 
8074             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8075             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8076             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8077          }
8078       }
8079 
8080       // .../DiagonalMatrix<DynamicMatrix>
8081       {
8082          {
8083             using T1 = CompressedMatrix<int,rowMajor>;
8084             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
8085             using RT = DynamicMatrix<double,rowMajor>;
8086             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8087 
8088             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8089             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8090             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8091          }
8092          {
8093             using T1 = CompressedMatrix<int,rowMajor>;
8094             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
8095             using RT = DynamicMatrix<double,columnMajor>;
8096             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8097 
8098             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8099             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8100             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8101          }
8102          {
8103             using T1 = CompressedMatrix<int,columnMajor>;
8104             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
8105             using RT = DynamicMatrix<double,rowMajor>;
8106             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8107 
8108             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8109             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8110             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8111          }
8112          {
8113             using T1 = CompressedMatrix<int,columnMajor>;
8114             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
8115             using RT = DynamicMatrix<double,columnMajor>;
8116             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8117 
8118             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8119             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8120             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8121          }
8122       }
8123    }
8124 
8125    // IdentityMatrix/...
8126    {
8127       // .../StaticMatrix
8128       {
8129          {
8130             using T1 = IdentityMatrix<int,rowMajor>;
8131             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
8132             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
8133             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8134 
8135             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8136             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8137             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8138          }
8139          {
8140             using T1 = IdentityMatrix<int,rowMajor>;
8141             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
8142             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
8143             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8144 
8145             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8146             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8147             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8148          }
8149          {
8150             using T1 = IdentityMatrix<int,columnMajor>;
8151             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
8152             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
8153             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8154 
8155             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8156             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8157             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8158          }
8159          {
8160             using T1 = IdentityMatrix<int,columnMajor>;
8161             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
8162             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
8163             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8164 
8165             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8166             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8167             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8168          }
8169       }
8170 
8171       // .../HybridMatrix
8172       {
8173          {
8174             using T1 = IdentityMatrix<int,rowMajor>;
8175             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
8176             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
8177             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8178 
8179             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8180             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8181             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8182          }
8183          {
8184             using T1 = IdentityMatrix<int,rowMajor>;
8185             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
8186             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
8187             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8188 
8189             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8190             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8191             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8192          }
8193          {
8194             using T1 = IdentityMatrix<int,columnMajor>;
8195             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
8196             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
8197             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8198 
8199             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8200             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8201             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8202          }
8203          {
8204             using T1 = IdentityMatrix<int,columnMajor>;
8205             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
8206             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
8207             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8208 
8209             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8210             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8211             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8212          }
8213       }
8214 
8215       // .../DynamicMatrix
8216       {
8217          {
8218             using T1 = IdentityMatrix<int,rowMajor>;
8219             using T2 = DynamicMatrix<double,rowMajor>;
8220             using RT = DynamicMatrix<double,rowMajor>;
8221             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8222 
8223             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8224             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8225             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8226          }
8227          {
8228             using T1 = IdentityMatrix<int,rowMajor>;
8229             using T2 = DynamicMatrix<double,columnMajor>;
8230             using RT = DynamicMatrix<double,columnMajor>;
8231             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8232 
8233             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8234             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8235             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8236          }
8237          {
8238             using T1 = IdentityMatrix<int,columnMajor>;
8239             using T2 = DynamicMatrix<double,rowMajor>;
8240             using RT = DynamicMatrix<double,rowMajor>;
8241             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8242 
8243             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8244             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8245             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8246          }
8247          {
8248             using T1 = IdentityMatrix<int,columnMajor>;
8249             using T2 = DynamicMatrix<double,columnMajor>;
8250             using RT = DynamicMatrix<double,columnMajor>;
8251             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8252 
8253             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8254             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8255             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8256          }
8257       }
8258 
8259       // .../CustomMatrix
8260       {
8261          {
8262             using T1 = IdentityMatrix<int,rowMajor>;
8263             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
8264             using RT = DynamicMatrix<double,rowMajor>;
8265             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8266 
8267             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8268             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8269             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8270          }
8271          {
8272             using T1 = IdentityMatrix<int,rowMajor>;
8273             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
8274             using RT = DynamicMatrix<double,columnMajor>;
8275             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8276 
8277             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8278             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8279             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8280          }
8281          {
8282             using T1 = IdentityMatrix<int,columnMajor>;
8283             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
8284             using RT = DynamicMatrix<double,rowMajor>;
8285             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8286 
8287             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8288             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8289             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8290          }
8291          {
8292             using T1 = IdentityMatrix<int,columnMajor>;
8293             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
8294             using RT = DynamicMatrix<double,columnMajor>;
8295             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8296 
8297             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8298             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8299             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8300          }
8301       }
8302 
8303       // .../UniformMatrix
8304       {
8305          {
8306             using T1 = IdentityMatrix<int,rowMajor>;
8307             using T2 = UniformMatrix<double,rowMajor>;
8308             using RT = DynamicMatrix<double,rowMajor>;
8309             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8310 
8311             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8312             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8313             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8314          }
8315          {
8316             using T1 = IdentityMatrix<int,rowMajor>;
8317             using T2 = UniformMatrix<double,columnMajor>;
8318             using RT = DynamicMatrix<double,columnMajor>;
8319             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8320 
8321             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8322             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8323             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8324          }
8325          {
8326             using T1 = IdentityMatrix<int,columnMajor>;
8327             using T2 = UniformMatrix<double,rowMajor>;
8328             using RT = DynamicMatrix<double,rowMajor>;
8329             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8330 
8331             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8332             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8333             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8334          }
8335          {
8336             using T1 = IdentityMatrix<int,columnMajor>;
8337             using T2 = UniformMatrix<double,columnMajor>;
8338             using RT = DynamicMatrix<double,columnMajor>;
8339             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8340 
8341             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8342             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8343             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8344          }
8345       }
8346 
8347       // .../InitializerMatrix
8348       {
8349          {
8350             using T1 = IdentityMatrix<int,rowMajor>;
8351             using T2 = InitializerMatrix<double>;
8352             using RT = DynamicMatrix<double,rowMajor>;
8353             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8354 
8355             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8356             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8357             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8358          }
8359          {
8360             using T1 = IdentityMatrix<int,columnMajor>;
8361             using T2 = InitializerMatrix<double>;
8362             using RT = DynamicMatrix<double,rowMajor>;
8363             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8364 
8365             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8366             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8367             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8368          }
8369       }
8370 
8371       // .../CompressedMatrix
8372       {
8373          {
8374             using T1 = IdentityMatrix<int,rowMajor>;
8375             using T2 = CompressedMatrix<double,rowMajor>;
8376             using RT = CompressedMatrix<double,rowMajor>;
8377             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8378 
8379             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8380             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8381             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8382          }
8383          {
8384             using T1 = IdentityMatrix<int,rowMajor>;
8385             using T2 = CompressedMatrix<double,columnMajor>;
8386             using RT = CompressedMatrix<double,rowMajor>;
8387             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8388 
8389             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8390             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8391             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8392          }
8393          {
8394             using T1 = IdentityMatrix<int,columnMajor>;
8395             using T2 = CompressedMatrix<double,rowMajor>;
8396             using RT = CompressedMatrix<double,rowMajor>;
8397             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8398 
8399             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8400             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8401             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8402          }
8403          {
8404             using T1 = IdentityMatrix<int,columnMajor>;
8405             using T2 = CompressedMatrix<double,columnMajor>;
8406             using RT = CompressedMatrix<double,columnMajor>;
8407             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8408 
8409             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8410             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8411             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8412          }
8413       }
8414 
8415       // .../IdentityMatrix
8416       {
8417          {
8418             using T1 = IdentityMatrix<int,rowMajor>;
8419             using T2 = IdentityMatrix<double,rowMajor>;
8420             using RT = DiagonalMatrix< CompressedMatrix<double,rowMajor> >;
8421             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8422 
8423             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8424             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8425             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8426          }
8427          {
8428             using T1 = IdentityMatrix<int,rowMajor>;
8429             using T2 = IdentityMatrix<double,columnMajor>;
8430             using RT = DiagonalMatrix< CompressedMatrix<double,rowMajor> >;
8431             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8432 
8433             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8434             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8435             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8436          }
8437          {
8438             using T1 = IdentityMatrix<int,columnMajor>;
8439             using T2 = IdentityMatrix<double,rowMajor>;
8440             using RT = DiagonalMatrix< CompressedMatrix<double,rowMajor> >;
8441             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8442 
8443             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8444             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8445             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8446          }
8447          {
8448             using T1 = IdentityMatrix<int,columnMajor>;
8449             using T2 = IdentityMatrix<double,columnMajor>;
8450             using RT = DiagonalMatrix< CompressedMatrix<double,columnMajor> >;
8451             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8452 
8453             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8454             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8455             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8456          }
8457       }
8458 
8459       // .../ZeroMatrix
8460       {
8461          {
8462             using T1 = IdentityMatrix<int,rowMajor>;
8463             using T2 = ZeroMatrix<double,rowMajor>;
8464             using RT = IdentityMatrix<double,rowMajor>;
8465             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8466 
8467             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8468             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8469             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8470          }
8471          {
8472             using T1 = IdentityMatrix<int,rowMajor>;
8473             using T2 = ZeroMatrix<double,columnMajor>;
8474             using RT = IdentityMatrix<double,rowMajor>;
8475             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8476 
8477             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8478             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8479             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8480          }
8481          {
8482             using T1 = IdentityMatrix<int,columnMajor>;
8483             using T2 = ZeroMatrix<double,rowMajor>;
8484             using RT = IdentityMatrix<double,columnMajor>;
8485             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8486 
8487             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8488             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8489             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8490          }
8491          {
8492             using T1 = IdentityMatrix<int,columnMajor>;
8493             using T2 = ZeroMatrix<double,columnMajor>;
8494             using RT = IdentityMatrix<double,columnMajor>;
8495             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8496 
8497             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8498             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8499             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8500          }
8501       }
8502 
8503       // .../SymmetricMatrix<DynamicMatrix> (real)
8504       {
8505          {
8506             using T1 = IdentityMatrix<int,rowMajor>;
8507             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
8508             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
8509             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8510 
8511             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8512             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8513             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8514          }
8515          {
8516             using T1 = IdentityMatrix<int,rowMajor>;
8517             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
8518             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
8519             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8520 
8521             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8522             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8523             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8524          }
8525          {
8526             using T1 = IdentityMatrix<int,columnMajor>;
8527             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
8528             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
8529             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8530 
8531             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8532             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8533             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8534          }
8535          {
8536             using T1 = IdentityMatrix<int,columnMajor>;
8537             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
8538             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
8539             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8540 
8541             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8542             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8543             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8544          }
8545       }
8546 
8547       // .../SymmetricMatrix<DynamicMatrix> (complex)
8548       {
8549          {
8550             using T1 = IdentityMatrix<int,rowMajor>;
8551             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
8552             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
8553             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8554 
8555             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8556             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8557             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8558          }
8559          {
8560             using T1 = IdentityMatrix<int,rowMajor>;
8561             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
8562             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
8563             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8564 
8565             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8566             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8567             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8568          }
8569          {
8570             using T1 = IdentityMatrix<int,columnMajor>;
8571             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
8572             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
8573             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8574 
8575             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8576             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8577             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8578          }
8579          {
8580             using T1 = IdentityMatrix<int,columnMajor>;
8581             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
8582             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
8583             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8584 
8585             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8586             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8587             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8588          }
8589       }
8590 
8591       // .../SymmetricMatrix<UniformMatrix>
8592       {
8593          {
8594             using T1 = IdentityMatrix<int,rowMajor>;
8595             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
8596             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
8597             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8598 
8599             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8600             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8601             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8602          }
8603          {
8604             using T1 = IdentityMatrix<int,rowMajor>;
8605             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
8606             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
8607             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8608 
8609             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8610             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8611             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8612          }
8613          {
8614             using T1 = IdentityMatrix<int,columnMajor>;
8615             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
8616             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
8617             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8618 
8619             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8620             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8621             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8622          }
8623          {
8624             using T1 = IdentityMatrix<int,columnMajor>;
8625             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
8626             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
8627             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8628 
8629             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8630             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8631             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8632          }
8633       }
8634 
8635       // .../SymmetricMatrix<ZeroMatrix>
8636       {
8637          {
8638             using T1 = IdentityMatrix<int,rowMajor>;
8639             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
8640             using RT = IdentityMatrix<double,rowMajor>;
8641             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8642 
8643             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8644             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8645             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8646          }
8647          {
8648             using T1 = IdentityMatrix<int,rowMajor>;
8649             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
8650             using RT = IdentityMatrix<double,rowMajor>;
8651             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8652 
8653             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8654             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8655             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8656          }
8657          {
8658             using T1 = IdentityMatrix<int,columnMajor>;
8659             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
8660             using RT = IdentityMatrix<double,columnMajor>;
8661             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8662 
8663             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8664             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8665             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8666          }
8667          {
8668             using T1 = IdentityMatrix<int,columnMajor>;
8669             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
8670             using RT = IdentityMatrix<double,columnMajor>;
8671             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8672 
8673             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8674             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8675             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8676          }
8677       }
8678 
8679       // .../HermitianMatrix<DynamicMatrix> (symmetric)
8680       {
8681          {
8682             using T1 = IdentityMatrix<int,rowMajor>;
8683             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
8684             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
8685             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8686 
8687             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8688             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8689             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8690          }
8691          {
8692             using T1 = IdentityMatrix<int,rowMajor>;
8693             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
8694             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
8695             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8696 
8697             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8698             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8699             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8700          }
8701          {
8702             using T1 = IdentityMatrix<int,columnMajor>;
8703             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
8704             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
8705             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8706 
8707             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8708             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8709             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8710          }
8711          {
8712             using T1 = IdentityMatrix<int,columnMajor>;
8713             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
8714             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
8715             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8716 
8717             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8718             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8719             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8720          }
8721       }
8722 
8723       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
8724       {
8725          {
8726             using T1 = IdentityMatrix<int,rowMajor>;
8727             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
8728             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
8729             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8730 
8731             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8732             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8733             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8734          }
8735          {
8736             using T1 = IdentityMatrix<int,rowMajor>;
8737             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
8738             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
8739             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8740 
8741             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8742             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8743             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8744          }
8745          {
8746             using T1 = IdentityMatrix<int,columnMajor>;
8747             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
8748             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
8749             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8750 
8751             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8752             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8753             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8754          }
8755          {
8756             using T1 = IdentityMatrix<int,columnMajor>;
8757             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
8758             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
8759             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8760 
8761             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8762             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8763             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8764          }
8765       }
8766 
8767       // .../LowerMatrix<DynamicMatrix>
8768       {
8769          {
8770             using T1 = IdentityMatrix<int,rowMajor>;
8771             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
8772             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
8773             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8774 
8775             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8776             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8777             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8778          }
8779          {
8780             using T1 = IdentityMatrix<int,rowMajor>;
8781             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
8782             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
8783             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8784 
8785             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8786             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8787             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8788          }
8789          {
8790             using T1 = IdentityMatrix<int,columnMajor>;
8791             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
8792             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
8793             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8794 
8795             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8796             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8797             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8798          }
8799          {
8800             using T1 = IdentityMatrix<int,columnMajor>;
8801             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
8802             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
8803             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8804 
8805             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8806             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8807             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8808          }
8809       }
8810 
8811       // .../UniLowerMatrix<DynamicMatrix>
8812       {
8813          {
8814             using T1 = IdentityMatrix<int,rowMajor>;
8815             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
8816             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
8817             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8818 
8819             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8820             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8821             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8822          }
8823          {
8824             using T1 = IdentityMatrix<int,rowMajor>;
8825             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
8826             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
8827             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8828 
8829             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8830             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8831             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8832          }
8833          {
8834             using T1 = IdentityMatrix<int,columnMajor>;
8835             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
8836             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
8837             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8838 
8839             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8840             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8841             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8842          }
8843          {
8844             using T1 = IdentityMatrix<int,columnMajor>;
8845             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
8846             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
8847             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8848 
8849             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8850             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8851             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8852          }
8853       }
8854 
8855       // .../StrictlyLowerMatrix<DynamicMatrix>
8856       {
8857          {
8858             using T1 = IdentityMatrix<int,rowMajor>;
8859             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
8860             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
8861             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8862 
8863             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8864             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8865             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8866          }
8867          {
8868             using T1 = IdentityMatrix<int,rowMajor>;
8869             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
8870             using RT = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
8871             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8872 
8873             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8874             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8875             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8876          }
8877          {
8878             using T1 = IdentityMatrix<int,columnMajor>;
8879             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
8880             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
8881             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8882 
8883             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8884             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8885             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8886          }
8887          {
8888             using T1 = IdentityMatrix<int,columnMajor>;
8889             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
8890             using RT = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
8891             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8892 
8893             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8894             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8895             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8896          }
8897       }
8898 
8899       // .../UpperMatrix<DynamicMatrix>
8900       {
8901          {
8902             using T1 = IdentityMatrix<int,rowMajor>;
8903             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
8904             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
8905             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8906 
8907             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8908             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8909             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8910          }
8911          {
8912             using T1 = IdentityMatrix<int,rowMajor>;
8913             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
8914             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
8915             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8916 
8917             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8918             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8919             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8920          }
8921          {
8922             using T1 = IdentityMatrix<int,columnMajor>;
8923             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
8924             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
8925             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8926 
8927             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8928             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8929             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8930          }
8931          {
8932             using T1 = IdentityMatrix<int,columnMajor>;
8933             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
8934             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
8935             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8936 
8937             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8938             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8939             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8940          }
8941       }
8942 
8943       // .../UniUpperMatrix<DynamicMatrix>
8944       {
8945          {
8946             using T1 = IdentityMatrix<int,rowMajor>;
8947             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
8948             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
8949             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8950 
8951             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8952             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8953             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8954          }
8955          {
8956             using T1 = IdentityMatrix<int,rowMajor>;
8957             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
8958             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
8959             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8960 
8961             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8962             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8963             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8964          }
8965          {
8966             using T1 = IdentityMatrix<int,columnMajor>;
8967             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
8968             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
8969             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8970 
8971             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8972             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8973             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8974          }
8975          {
8976             using T1 = IdentityMatrix<int,columnMajor>;
8977             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
8978             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
8979             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8980 
8981             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8982             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8983             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8984          }
8985       }
8986 
8987       // .../StrictlyUpperMatrix<DynamicMatrix>
8988       {
8989          {
8990             using T1 = IdentityMatrix<int,rowMajor>;
8991             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
8992             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
8993             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
8994 
8995             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
8996             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
8997             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
8998          }
8999          {
9000             using T1 = IdentityMatrix<int,rowMajor>;
9001             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
9002             using RT = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
9003             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9004 
9005             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9006             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9007             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9008          }
9009          {
9010             using T1 = IdentityMatrix<int,columnMajor>;
9011             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
9012             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
9013             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9014 
9015             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9016             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9017             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9018          }
9019          {
9020             using T1 = IdentityMatrix<int,columnMajor>;
9021             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
9022             using RT = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
9023             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9024 
9025             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9026             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9027             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9028          }
9029       }
9030 
9031       // .../DiagonalMatrix<DynamicMatrix>
9032       {
9033          {
9034             using T1 = IdentityMatrix<int,rowMajor>;
9035             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
9036             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
9037             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9038 
9039             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9040             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9041             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9042          }
9043          {
9044             using T1 = IdentityMatrix<int,rowMajor>;
9045             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
9046             using RT = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
9047             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9048 
9049             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9050             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9051             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9052          }
9053          {
9054             using T1 = IdentityMatrix<int,columnMajor>;
9055             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
9056             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
9057             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9058 
9059             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9060             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9061             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9062          }
9063          {
9064             using T1 = IdentityMatrix<int,columnMajor>;
9065             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
9066             using RT = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
9067             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9068 
9069             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9070             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9071             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9072          }
9073       }
9074    }
9075 
9076    // ZeroMatrix/...
9077    {
9078       // .../StaticMatrix
9079       {
9080          {
9081             using T1 = ZeroMatrix<int,rowMajor>;
9082             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
9083             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
9084             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9085 
9086             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9087             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9088             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9089          }
9090          {
9091             using T1 = ZeroMatrix<int,rowMajor>;
9092             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
9093             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
9094             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9095 
9096             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9097             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9098             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9099          }
9100          {
9101             using T1 = ZeroMatrix<int,columnMajor>;
9102             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
9103             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
9104             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9105 
9106             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9107             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9108             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9109          }
9110          {
9111             using T1 = ZeroMatrix<int,columnMajor>;
9112             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
9113             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
9114             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9115 
9116             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9117             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9118             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9119          }
9120       }
9121 
9122       // .../HybridMatrix
9123       {
9124          {
9125             using T1 = ZeroMatrix<int,rowMajor>;
9126             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
9127             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
9128             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9129 
9130             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9131             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9132             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9133          }
9134          {
9135             using T1 = ZeroMatrix<int,rowMajor>;
9136             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
9137             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
9138             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9139 
9140             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9141             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9142             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9143          }
9144          {
9145             using T1 = ZeroMatrix<int,columnMajor>;
9146             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
9147             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
9148             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9149 
9150             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9151             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9152             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9153          }
9154          {
9155             using T1 = ZeroMatrix<int,columnMajor>;
9156             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
9157             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
9158             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9159 
9160             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9161             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9162             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9163          }
9164       }
9165 
9166       // .../DynamicMatrix
9167       {
9168          {
9169             using T1 = ZeroMatrix<int,rowMajor>;
9170             using T2 = DynamicMatrix<double,rowMajor>;
9171             using RT = DynamicMatrix<double,rowMajor>;
9172             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9173 
9174             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9175             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9176             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9177          }
9178          {
9179             using T1 = ZeroMatrix<int,rowMajor>;
9180             using T2 = DynamicMatrix<double,columnMajor>;
9181             using RT = DynamicMatrix<double,columnMajor>;
9182             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9183 
9184             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9185             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9186             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9187          }
9188          {
9189             using T1 = ZeroMatrix<int,columnMajor>;
9190             using T2 = DynamicMatrix<double,rowMajor>;
9191             using RT = DynamicMatrix<double,rowMajor>;
9192             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9193 
9194             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9195             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9196             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9197          }
9198          {
9199             using T1 = ZeroMatrix<int,columnMajor>;
9200             using T2 = DynamicMatrix<double,columnMajor>;
9201             using RT = DynamicMatrix<double,columnMajor>;
9202             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9203 
9204             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9205             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9206             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9207          }
9208       }
9209 
9210       // .../CustomMatrix
9211       {
9212          {
9213             using T1 = ZeroMatrix<int,rowMajor>;
9214             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
9215             using RT = DynamicMatrix<double,rowMajor>;
9216             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9217 
9218             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9219             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9220             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9221          }
9222          {
9223             using T1 = ZeroMatrix<int,rowMajor>;
9224             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
9225             using RT = DynamicMatrix<double,columnMajor>;
9226             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9227 
9228             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9229             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9230             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9231          }
9232          {
9233             using T1 = ZeroMatrix<int,columnMajor>;
9234             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
9235             using RT = DynamicMatrix<double,rowMajor>;
9236             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9237 
9238             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9239             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9240             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9241          }
9242          {
9243             using T1 = ZeroMatrix<int,columnMajor>;
9244             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
9245             using RT = DynamicMatrix<double,columnMajor>;
9246             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9247 
9248             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9249             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9250             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9251          }
9252       }
9253 
9254       // .../UniformMatrix
9255       {
9256          {
9257             using T1 = ZeroMatrix<int,rowMajor>;
9258             using T2 = UniformMatrix<double,rowMajor>;
9259             using RT = UniformMatrix<double,rowMajor>;
9260             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9261 
9262             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9263             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9264             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9265          }
9266          {
9267             using T1 = ZeroMatrix<int,rowMajor>;
9268             using T2 = UniformMatrix<double,columnMajor>;
9269             using RT = UniformMatrix<double,columnMajor>;
9270             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9271 
9272             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9273             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9274             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9275          }
9276          {
9277             using T1 = ZeroMatrix<int,columnMajor>;
9278             using T2 = UniformMatrix<double,rowMajor>;
9279             using RT = UniformMatrix<double,rowMajor>;
9280             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9281 
9282             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9283             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9284             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9285          }
9286          {
9287             using T1 = ZeroMatrix<int,columnMajor>;
9288             using T2 = UniformMatrix<double,columnMajor>;
9289             using RT = UniformMatrix<double,columnMajor>;
9290             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9291 
9292             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9293             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9294             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9295          }
9296       }
9297 
9298       // .../InitializerMatrix
9299       {
9300          {
9301             using T1 = ZeroMatrix<int,rowMajor>;
9302             using T2 = InitializerMatrix<double>;
9303             using RT = DynamicMatrix<double,rowMajor>;
9304             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9305 
9306             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9307             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9308             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9309          }
9310          {
9311             using T1 = ZeroMatrix<int,columnMajor>;
9312             using T2 = InitializerMatrix<double>;
9313             using RT = DynamicMatrix<double,rowMajor>;
9314             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9315 
9316             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9317             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9318             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9319          }
9320       }
9321 
9322       // .../CompressedMatrix
9323       {
9324          {
9325             using T1 = ZeroMatrix<int,rowMajor>;
9326             using T2 = CompressedMatrix<double,rowMajor>;
9327             using RT = CompressedMatrix<double,rowMajor>;
9328             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9329 
9330             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9331             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9332             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9333          }
9334          {
9335             using T1 = ZeroMatrix<int,rowMajor>;
9336             using T2 = CompressedMatrix<double,columnMajor>;
9337             using RT = CompressedMatrix<double,columnMajor>;
9338             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9339 
9340             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9341             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9342             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9343          }
9344          {
9345             using T1 = ZeroMatrix<int,columnMajor>;
9346             using T2 = CompressedMatrix<double,rowMajor>;
9347             using RT = CompressedMatrix<double,rowMajor>;
9348             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9349 
9350             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9351             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9352             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9353          }
9354          {
9355             using T1 = ZeroMatrix<int,columnMajor>;
9356             using T2 = CompressedMatrix<double,columnMajor>;
9357             using RT = CompressedMatrix<double,columnMajor>;
9358             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9359 
9360             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9361             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9362             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9363          }
9364       }
9365 
9366       // .../IdentityMatrix
9367       {
9368          {
9369             using T1 = ZeroMatrix<int,rowMajor>;
9370             using T2 = IdentityMatrix<double,rowMajor>;
9371             using RT = IdentityMatrix<double,rowMajor>;
9372             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9373 
9374             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9375             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9376             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9377          }
9378          {
9379             using T1 = ZeroMatrix<int,rowMajor>;
9380             using T2 = IdentityMatrix<double,columnMajor>;
9381             using RT = IdentityMatrix<double,columnMajor>;
9382             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9383 
9384             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9385             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9386             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9387          }
9388          {
9389             using T1 = ZeroMatrix<int,columnMajor>;
9390             using T2 = IdentityMatrix<double,rowMajor>;
9391             using RT = IdentityMatrix<double,rowMajor>;
9392             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9393 
9394             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9395             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9396             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9397          }
9398          {
9399             using T1 = ZeroMatrix<int,columnMajor>;
9400             using T2 = IdentityMatrix<double,columnMajor>;
9401             using RT = IdentityMatrix<double,columnMajor>;
9402             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9403 
9404             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9405             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9406             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9407          }
9408       }
9409 
9410       // .../ZeroMatrix
9411       {
9412          {
9413             using T1 = ZeroMatrix<int,rowMajor>;
9414             using T2 = ZeroMatrix<double,rowMajor>;
9415             using RT = ZeroMatrix<double,rowMajor>;
9416             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9417 
9418             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9419             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9420             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9421          }
9422          {
9423             using T1 = ZeroMatrix<int,rowMajor>;
9424             using T2 = ZeroMatrix<double,columnMajor>;
9425             using RT = ZeroMatrix<double,rowMajor>;
9426             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9427 
9428             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9429             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9430             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9431          }
9432          {
9433             using T1 = ZeroMatrix<int,columnMajor>;
9434             using T2 = ZeroMatrix<double,rowMajor>;
9435             using RT = ZeroMatrix<double,rowMajor>;
9436             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9437 
9438             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9439             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9440             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9441          }
9442          {
9443             using T1 = ZeroMatrix<int,columnMajor>;
9444             using T2 = ZeroMatrix<double,columnMajor>;
9445             using RT = ZeroMatrix<double,columnMajor>;
9446             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9447 
9448             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9449             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9450             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9451          }
9452       }
9453 
9454       // .../SymmetricMatrix<DynamicMatrix> (real)
9455       {
9456          {
9457             using T1 = ZeroMatrix<int,rowMajor>;
9458             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
9459             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
9460             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9461 
9462             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9463             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9464             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9465          }
9466          {
9467             using T1 = ZeroMatrix<int,rowMajor>;
9468             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
9469             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
9470             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9471 
9472             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9473             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9474             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9475          }
9476          {
9477             using T1 = ZeroMatrix<int,columnMajor>;
9478             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
9479             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
9480             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9481 
9482             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9483             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9484             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9485          }
9486          {
9487             using T1 = ZeroMatrix<int,columnMajor>;
9488             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
9489             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
9490             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9491 
9492             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9493             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9494             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9495          }
9496       }
9497 
9498       // .../SymmetricMatrix<DynamicMatrix> (complex)
9499       {
9500          {
9501             using T1 = ZeroMatrix<int,rowMajor>;
9502             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
9503             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
9504             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9505 
9506             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9507             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9508             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9509          }
9510          {
9511             using T1 = ZeroMatrix<int,rowMajor>;
9512             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
9513             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
9514             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9515 
9516             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9517             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9518             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9519          }
9520          {
9521             using T1 = ZeroMatrix<int,columnMajor>;
9522             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
9523             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
9524             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9525 
9526             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9527             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9528             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9529          }
9530          {
9531             using T1 = ZeroMatrix<int,columnMajor>;
9532             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
9533             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
9534             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9535 
9536             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9537             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9538             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9539          }
9540       }
9541 
9542       // .../SymmetricMatrix<UniformMatrix>
9543       {
9544          {
9545             using T1 = ZeroMatrix<int,rowMajor>;
9546             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
9547             using RT = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
9548             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9549 
9550             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9551             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9552             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9553          }
9554          {
9555             using T1 = ZeroMatrix<int,rowMajor>;
9556             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
9557             using RT = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
9558             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9559 
9560             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9561             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9562             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9563          }
9564          {
9565             using T1 = ZeroMatrix<int,columnMajor>;
9566             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
9567             using RT = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
9568             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9569 
9570             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9571             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9572             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9573          }
9574          {
9575             using T1 = ZeroMatrix<int,columnMajor>;
9576             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
9577             using RT = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
9578             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9579 
9580             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9581             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9582             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9583          }
9584       }
9585 
9586       // .../SymmetricMatrix<ZeroMatrix>
9587       {
9588          {
9589             using T1 = ZeroMatrix<int,rowMajor>;
9590             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
9591             using RT = ZeroMatrix<double,rowMajor>;
9592             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9593 
9594             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9595             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9596             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9597          }
9598          {
9599             using T1 = ZeroMatrix<int,rowMajor>;
9600             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
9601             using RT = ZeroMatrix<double,rowMajor>;
9602             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9603 
9604             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9605             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9606             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9607          }
9608          {
9609             using T1 = ZeroMatrix<int,columnMajor>;
9610             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
9611             using RT = ZeroMatrix<double,rowMajor>;
9612             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9613 
9614             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9615             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9616             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9617          }
9618          {
9619             using T1 = ZeroMatrix<int,columnMajor>;
9620             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
9621             using RT = ZeroMatrix<double,columnMajor>;
9622             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9623 
9624             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9625             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9626             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9627          }
9628       }
9629 
9630       // .../HermitianMatrix<DynamicMatrix> (symmetric)
9631       {
9632          {
9633             using T1 = ZeroMatrix<int,rowMajor>;
9634             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
9635             using RT = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
9636             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9637 
9638             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9639             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9640             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9641          }
9642          {
9643             using T1 = ZeroMatrix<int,rowMajor>;
9644             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
9645             using RT = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
9646             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9647 
9648             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9649             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9650             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9651          }
9652          {
9653             using T1 = ZeroMatrix<int,columnMajor>;
9654             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
9655             using RT = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
9656             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9657 
9658             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9659             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9660             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9661          }
9662          {
9663             using T1 = ZeroMatrix<int,columnMajor>;
9664             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
9665             using RT = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
9666             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9667 
9668             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9669             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9670             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9671          }
9672       }
9673 
9674       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
9675       {
9676          {
9677             using T1 = ZeroMatrix<int,rowMajor>;
9678             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
9679             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
9680             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9681 
9682             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9683             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9684             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9685          }
9686          {
9687             using T1 = ZeroMatrix<int,rowMajor>;
9688             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
9689             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
9690             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9691 
9692             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9693             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9694             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9695          }
9696          {
9697             using T1 = ZeroMatrix<int,columnMajor>;
9698             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
9699             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
9700             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9701 
9702             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9703             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9704             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9705          }
9706          {
9707             using T1 = ZeroMatrix<int,columnMajor>;
9708             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
9709             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
9710             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9711 
9712             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9713             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9714             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9715          }
9716       }
9717 
9718       // .../LowerMatrix<DynamicMatrix>
9719       {
9720          {
9721             using T1 = ZeroMatrix<int,rowMajor>;
9722             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
9723             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
9724             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9725 
9726             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9727             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9728             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9729          }
9730          {
9731             using T1 = ZeroMatrix<int,rowMajor>;
9732             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
9733             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
9734             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9735 
9736             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9737             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9738             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9739          }
9740          {
9741             using T1 = ZeroMatrix<int,columnMajor>;
9742             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
9743             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
9744             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9745 
9746             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9747             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9748             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9749          }
9750          {
9751             using T1 = ZeroMatrix<int,columnMajor>;
9752             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
9753             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
9754             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9755 
9756             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9757             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9758             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9759          }
9760       }
9761 
9762       // .../UniLowerMatrix<DynamicMatrix>
9763       {
9764          {
9765             using T1 = ZeroMatrix<int,rowMajor>;
9766             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
9767             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
9768             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9769 
9770             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9771             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9772             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9773          }
9774          {
9775             using T1 = ZeroMatrix<int,rowMajor>;
9776             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
9777             using RT = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
9778             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9779 
9780             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9781             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9782             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9783          }
9784          {
9785             using T1 = ZeroMatrix<int,columnMajor>;
9786             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
9787             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
9788             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9789 
9790             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9791             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9792             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9793          }
9794          {
9795             using T1 = ZeroMatrix<int,columnMajor>;
9796             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
9797             using RT = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
9798             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9799 
9800             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9801             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9802             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9803          }
9804       }
9805 
9806       // .../StrictlyLowerMatrix<DynamicMatrix>
9807       {
9808          {
9809             using T1 = ZeroMatrix<int,rowMajor>;
9810             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
9811             using RT = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
9812             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9813 
9814             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9815             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9816             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9817          }
9818          {
9819             using T1 = ZeroMatrix<int,rowMajor>;
9820             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
9821             using RT = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
9822             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9823 
9824             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9825             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9826             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9827          }
9828          {
9829             using T1 = ZeroMatrix<int,columnMajor>;
9830             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
9831             using RT = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
9832             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9833 
9834             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9835             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9836             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9837          }
9838          {
9839             using T1 = ZeroMatrix<int,columnMajor>;
9840             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
9841             using RT = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
9842             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9843 
9844             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9845             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9846             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9847          }
9848       }
9849 
9850       // .../UpperMatrix<DynamicMatrix>
9851       {
9852          {
9853             using T1 = ZeroMatrix<int,rowMajor>;
9854             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
9855             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
9856             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9857 
9858             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9859             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9860             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9861          }
9862          {
9863             using T1 = ZeroMatrix<int,rowMajor>;
9864             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
9865             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
9866             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9867 
9868             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9869             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9870             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9871          }
9872          {
9873             using T1 = ZeroMatrix<int,columnMajor>;
9874             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
9875             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
9876             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9877 
9878             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9879             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9880             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9881          }
9882          {
9883             using T1 = ZeroMatrix<int,columnMajor>;
9884             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
9885             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
9886             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9887 
9888             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9889             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9890             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9891          }
9892       }
9893 
9894       // .../UniUpperMatrix<DynamicMatrix>
9895       {
9896          {
9897             using T1 = ZeroMatrix<int,rowMajor>;
9898             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
9899             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
9900             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9901 
9902             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9903             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9904             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9905          }
9906          {
9907             using T1 = ZeroMatrix<int,rowMajor>;
9908             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
9909             using RT = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
9910             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9911 
9912             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9913             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9914             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9915          }
9916          {
9917             using T1 = ZeroMatrix<int,columnMajor>;
9918             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
9919             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
9920             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9921 
9922             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9923             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9924             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9925          }
9926          {
9927             using T1 = ZeroMatrix<int,columnMajor>;
9928             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
9929             using RT = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
9930             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9931 
9932             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9933             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9934             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9935          }
9936       }
9937 
9938       // .../StrictlyUpperMatrix<DynamicMatrix>
9939       {
9940          {
9941             using T1 = ZeroMatrix<int,rowMajor>;
9942             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
9943             using RT = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
9944             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9945 
9946             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9947             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9948             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9949          }
9950          {
9951             using T1 = ZeroMatrix<int,rowMajor>;
9952             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
9953             using RT = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
9954             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9955 
9956             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9957             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9958             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9959          }
9960          {
9961             using T1 = ZeroMatrix<int,columnMajor>;
9962             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
9963             using RT = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
9964             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9965 
9966             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9967             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9968             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9969          }
9970          {
9971             using T1 = ZeroMatrix<int,columnMajor>;
9972             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
9973             using RT = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
9974             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9975 
9976             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9977             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9978             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9979          }
9980       }
9981 
9982       // .../DiagonalMatrix<DynamicMatrix>
9983       {
9984          {
9985             using T1 = ZeroMatrix<int,rowMajor>;
9986             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
9987             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
9988             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9989 
9990             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
9991             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
9992             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
9993          }
9994          {
9995             using T1 = ZeroMatrix<int,rowMajor>;
9996             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
9997             using RT = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
9998             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
9999 
10000             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10001             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10002             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10003          }
10004          {
10005             using T1 = ZeroMatrix<int,columnMajor>;
10006             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
10007             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
10008             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10009 
10010             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10011             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10012             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10013          }
10014          {
10015             using T1 = ZeroMatrix<int,columnMajor>;
10016             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
10017             using RT = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
10018             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10019 
10020             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10021             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10022             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10023          }
10024       }
10025    }
10026 
10027    // SymmetricMatrix<DynamicMatrix>/... (real)
10028    {
10029       // .../StaticMatrix
10030       {
10031          {
10032             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10033             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
10034             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
10035             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10036 
10037             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10038             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10039             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10040          }
10041          {
10042             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10043             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
10044             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
10045             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10046 
10047             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10048             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10049             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10050          }
10051          {
10052             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10053             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
10054             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
10055             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10056 
10057             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10058             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10059             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10060          }
10061          {
10062             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10063             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
10064             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
10065             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10066 
10067             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10068             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10069             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10070          }
10071       }
10072 
10073       // .../HybridMatrix
10074       {
10075          {
10076             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10077             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
10078             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
10079             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10080 
10081             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10082             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10083             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10084          }
10085          {
10086             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10087             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
10088             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
10089             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10090 
10091             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10092             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10093             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10094          }
10095          {
10096             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10097             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
10098             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
10099             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10100 
10101             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10102             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10103             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10104          }
10105          {
10106             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10107             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
10108             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
10109             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10110 
10111             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10112             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10113             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10114          }
10115       }
10116 
10117       // .../DynamicMatrix
10118       {
10119          {
10120             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10121             using T2 = DynamicMatrix<double,rowMajor>;
10122             using RT = DynamicMatrix<double,rowMajor>;
10123             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10124 
10125             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10126             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10127             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10128          }
10129          {
10130             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10131             using T2 = DynamicMatrix<double,columnMajor>;
10132             using RT = DynamicMatrix<double,columnMajor>;
10133             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10134 
10135             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10136             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10137             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10138          }
10139          {
10140             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10141             using T2 = DynamicMatrix<double,rowMajor>;
10142             using RT = DynamicMatrix<double,rowMajor>;
10143             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10144 
10145             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10146             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10147             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10148          }
10149          {
10150             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10151             using T2 = DynamicMatrix<double,columnMajor>;
10152             using RT = DynamicMatrix<double,columnMajor>;
10153             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10154 
10155             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10156             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10157             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10158          }
10159       }
10160 
10161       // .../CustomMatrix
10162       {
10163          {
10164             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10165             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
10166             using RT = DynamicMatrix<double,rowMajor>;
10167             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10168 
10169             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10170             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10171             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10172          }
10173          {
10174             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10175             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
10176             using RT = DynamicMatrix<double,columnMajor>;
10177             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10178 
10179             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10180             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10181             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10182          }
10183          {
10184             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10185             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
10186             using RT = DynamicMatrix<double,rowMajor>;
10187             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10188 
10189             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10190             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10191             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10192          }
10193          {
10194             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10195             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
10196             using RT = DynamicMatrix<double,columnMajor>;
10197             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10198 
10199             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10200             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10201             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10202          }
10203       }
10204 
10205       // .../UniformMatrix
10206       {
10207          {
10208             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10209             using T2 = UniformMatrix<double,rowMajor>;
10210             using RT = DynamicMatrix<double,rowMajor>;
10211             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10212 
10213             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10214             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10215             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10216          }
10217          {
10218             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10219             using T2 = UniformMatrix<double,columnMajor>;
10220             using RT = DynamicMatrix<double,columnMajor>;
10221             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10222 
10223             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10224             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10225             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10226          }
10227          {
10228             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10229             using T2 = UniformMatrix<double,rowMajor>;
10230             using RT = DynamicMatrix<double,rowMajor>;
10231             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10232 
10233             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10234             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10235             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10236          }
10237          {
10238             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10239             using T2 = UniformMatrix<double,columnMajor>;
10240             using RT = DynamicMatrix<double,columnMajor>;
10241             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10242 
10243             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10244             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10245             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10246          }
10247       }
10248 
10249       // .../InitializerMatrix
10250       {
10251          {
10252             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10253             using T2 = InitializerMatrix<double>;
10254             using RT = DynamicMatrix<double,rowMajor>;
10255             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10256 
10257             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10258             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10259             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10260          }
10261          {
10262             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10263             using T2 = InitializerMatrix<double>;
10264             using RT = DynamicMatrix<double,rowMajor>;
10265             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10266 
10267             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10268             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10269             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10270          }
10271       }
10272 
10273       // .../CompressedMatrix
10274       {
10275          {
10276             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10277             using T2 = CompressedMatrix<double,rowMajor>;
10278             using RT = DynamicMatrix<double,rowMajor>;
10279             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10280 
10281             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10282             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10283             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10284          }
10285          {
10286             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10287             using T2 = CompressedMatrix<double,columnMajor>;
10288             using RT = DynamicMatrix<double,rowMajor>;
10289             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10290 
10291             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10292             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10293             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10294          }
10295          {
10296             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10297             using T2 = CompressedMatrix<double,rowMajor>;
10298             using RT = DynamicMatrix<double,columnMajor>;
10299             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10300 
10301             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10302             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10303             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10304          }
10305          {
10306             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10307             using T2 = CompressedMatrix<double,columnMajor>;
10308             using RT = DynamicMatrix<double,columnMajor>;
10309             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10310 
10311             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10312             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10313             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10314          }
10315       }
10316 
10317       // .../IdentityMatrix
10318       {
10319          {
10320             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10321             using T2 = IdentityMatrix<double,rowMajor>;
10322             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10323             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10324 
10325             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10326             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10327             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10328          }
10329          {
10330             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10331             using T2 = IdentityMatrix<double,columnMajor>;
10332             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10333             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10334 
10335             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10336             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10337             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10338          }
10339          {
10340             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10341             using T2 = IdentityMatrix<double,rowMajor>;
10342             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
10343             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10344 
10345             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10346             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10347             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10348          }
10349          {
10350             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10351             using T2 = IdentityMatrix<double,columnMajor>;
10352             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
10353             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10354 
10355             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10356             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10357             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10358          }
10359       }
10360 
10361       // .../ZeroMatrix
10362       {
10363          {
10364             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10365             using T2 = ZeroMatrix<double,rowMajor>;
10366             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10367             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10368 
10369             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10370             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10371             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10372          }
10373          {
10374             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10375             using T2 = ZeroMatrix<double,columnMajor>;
10376             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10377             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10378 
10379             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10380             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10381             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10382          }
10383          {
10384             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10385             using T2 = ZeroMatrix<double,rowMajor>;
10386             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
10387             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10388 
10389             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10390             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10391             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10392          }
10393          {
10394             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10395             using T2 = ZeroMatrix<double,columnMajor>;
10396             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
10397             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10398 
10399             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10400             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10401             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10402          }
10403       }
10404 
10405       // .../SymmetricMatrix<DynamicMatrix> (real)
10406       {
10407          {
10408             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10409             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10410             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10411             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10412 
10413             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10414             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10415             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10416          }
10417          {
10418             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10419             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
10420             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10421             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10422 
10423             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10424             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10425             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10426          }
10427          {
10428             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10429             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10430             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10431             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10432 
10433             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10434             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10435             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10436          }
10437          {
10438             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10439             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
10440             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
10441             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10442 
10443             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10444             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10445             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10446          }
10447       }
10448 
10449       // .../SymmetricMatrix<DynamicMatrix> (complex)
10450       {
10451          {
10452             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10453             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
10454             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
10455             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10456 
10457             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10458             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10459             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10460          }
10461          {
10462             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10463             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
10464             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
10465             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10466 
10467             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10468             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10469             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10470          }
10471          {
10472             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10473             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
10474             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
10475             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10476 
10477             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10478             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10479             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10480          }
10481          {
10482             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10483             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
10484             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
10485             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10486 
10487             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10488             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10489             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10490          }
10491       }
10492 
10493       // .../SymmetricMatrix<UniformMatrix>
10494       {
10495          {
10496             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10497             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
10498             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10499             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10500 
10501             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10502             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10503             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10504          }
10505          {
10506             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10507             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
10508             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10509             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10510 
10511             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10512             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10513             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10514          }
10515          {
10516             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10517             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
10518             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10519             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10520 
10521             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10522             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10523             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10524          }
10525          {
10526             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10527             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
10528             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
10529             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10530 
10531             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10532             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10533             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10534          }
10535       }
10536 
10537       // .../SymmetricMatrix<ZeroMatrix>
10538       {
10539          {
10540             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10541             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
10542             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10543             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10544 
10545             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10546             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10547             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10548          }
10549          {
10550             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10551             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
10552             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10553             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10554 
10555             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10556             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10557             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10558          }
10559          {
10560             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10561             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
10562             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
10563             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10564 
10565             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10566             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10567             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10568          }
10569          {
10570             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10571             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
10572             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
10573             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10574 
10575             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10576             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10577             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10578          }
10579       }
10580 
10581       // .../HermitianMatrix<DynamicMatrix> (symmetric)
10582       {
10583          {
10584             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10585             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
10586             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10587             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10588 
10589             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10590             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10591             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10592          }
10593          {
10594             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10595             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
10596             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10597             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10598 
10599             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10600             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10601             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10602          }
10603          {
10604             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10605             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
10606             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10607             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10608 
10609             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10610             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10611             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10612          }
10613          {
10614             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10615             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
10616             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
10617             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10618 
10619             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10620             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10621             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10622          }
10623       }
10624 
10625       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
10626       {
10627          {
10628             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10629             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
10630             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
10631             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10632 
10633             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10634             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10635             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10636          }
10637          {
10638             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10639             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
10640             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
10641             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10642 
10643             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10644             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10645             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10646          }
10647          {
10648             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10649             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
10650             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
10651             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10652 
10653             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10654             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10655             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10656          }
10657          {
10658             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10659             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
10660             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
10661             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10662 
10663             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10664             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10665             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10666          }
10667       }
10668 
10669       // .../LowerMatrix<DynamicMatrix>
10670       {
10671          {
10672             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10673             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
10674             using RT = DynamicMatrix<double,rowMajor>;
10675             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10676 
10677             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10678             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10679             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10680          }
10681          {
10682             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10683             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
10684             using RT = DynamicMatrix<double,columnMajor>;
10685             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10686 
10687             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10688             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10689             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10690          }
10691          {
10692             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10693             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
10694             using RT = DynamicMatrix<double,rowMajor>;
10695             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10696 
10697             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10698             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10699             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10700          }
10701          {
10702             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10703             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
10704             using RT = DynamicMatrix<double,columnMajor>;
10705             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10706 
10707             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10708             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10709             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10710          }
10711       }
10712 
10713       // .../UniLowerMatrix<DynamicMatrix>
10714       {
10715          {
10716             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10717             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
10718             using RT = DynamicMatrix<double,rowMajor>;
10719             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10720 
10721             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10722             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10723             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10724          }
10725          {
10726             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10727             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
10728             using RT = DynamicMatrix<double,columnMajor>;
10729             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10730 
10731             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10732             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10733             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10734          }
10735          {
10736             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10737             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
10738             using RT = DynamicMatrix<double,rowMajor>;
10739             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10740 
10741             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10742             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10743             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10744          }
10745          {
10746             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10747             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
10748             using RT = DynamicMatrix<double,columnMajor>;
10749             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10750 
10751             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10752             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10753             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10754          }
10755       }
10756 
10757       // .../StrictlyLowerMatrix<DynamicMatrix>
10758       {
10759          {
10760             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10761             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
10762             using RT = DynamicMatrix<double,rowMajor>;
10763             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10764 
10765             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10766             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10767             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10768          }
10769          {
10770             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10771             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
10772             using RT = DynamicMatrix<double,columnMajor>;
10773             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10774 
10775             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10776             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10777             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10778          }
10779          {
10780             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10781             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
10782             using RT = DynamicMatrix<double,rowMajor>;
10783             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10784 
10785             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10786             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10787             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10788          }
10789          {
10790             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10791             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
10792             using RT = DynamicMatrix<double,columnMajor>;
10793             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10794 
10795             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10796             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10797             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10798          }
10799       }
10800 
10801       // .../UpperMatrix<DynamicMatrix>
10802       {
10803          {
10804             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10805             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
10806             using RT = DynamicMatrix<double,rowMajor>;
10807             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10808 
10809             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10810             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10811             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10812          }
10813          {
10814             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10815             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
10816             using RT = DynamicMatrix<double,columnMajor>;
10817             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10818 
10819             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10820             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10821             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10822          }
10823          {
10824             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10825             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
10826             using RT = DynamicMatrix<double,rowMajor>;
10827             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10828 
10829             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10830             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10831             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10832          }
10833          {
10834             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10835             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
10836             using RT = DynamicMatrix<double,columnMajor>;
10837             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10838 
10839             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10840             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10841             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10842          }
10843       }
10844 
10845       // .../UniUpperMatrix<DynamicMatrix>
10846       {
10847          {
10848             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10849             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
10850             using RT = DynamicMatrix<double,rowMajor>;
10851             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10852 
10853             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10854             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10855             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10856          }
10857          {
10858             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10859             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
10860             using RT = DynamicMatrix<double,columnMajor>;
10861             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10862 
10863             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10864             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10865             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10866          }
10867          {
10868             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10869             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
10870             using RT = DynamicMatrix<double,rowMajor>;
10871             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10872 
10873             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10874             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10875             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10876          }
10877          {
10878             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10879             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
10880             using RT = DynamicMatrix<double,columnMajor>;
10881             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10882 
10883             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10884             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10885             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10886          }
10887       }
10888 
10889       // .../StrictlyUpperMatrix<DynamicMatrix>
10890       {
10891          {
10892             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10893             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
10894             using RT = DynamicMatrix<double,rowMajor>;
10895             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10896 
10897             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10898             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10899             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10900          }
10901          {
10902             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10903             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
10904             using RT = DynamicMatrix<double,columnMajor>;
10905             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10906 
10907             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10908             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10909             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10910          }
10911          {
10912             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10913             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
10914             using RT = DynamicMatrix<double,rowMajor>;
10915             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10916 
10917             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10918             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10919             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10920          }
10921          {
10922             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10923             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
10924             using RT = DynamicMatrix<double,columnMajor>;
10925             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10926 
10927             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10928             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10929             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10930          }
10931       }
10932 
10933       // .../DiagonalMatrix<DynamicMatrix>
10934       {
10935          {
10936             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10937             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
10938             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10939             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10940 
10941             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10942             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10943             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10944          }
10945          {
10946             using T1 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
10947             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
10948             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10949             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10950 
10951             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10952             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10953             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10954          }
10955          {
10956             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10957             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
10958             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
10959             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10960 
10961             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10962             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10963             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10964          }
10965          {
10966             using T1 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
10967             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
10968             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
10969             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10970 
10971             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10972             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10973             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10974          }
10975       }
10976    }
10977 
10978    // SymmetricMatrix<DynamicMatrix>/... (complex)
10979    {
10980       // .../StaticMatrix
10981       {
10982          {
10983             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
10984             using T2 = StaticMatrix<int,3UL,3UL,rowMajor>;
10985             using RT = StaticMatrix<complex<int>,3UL,3UL,rowMajor>;
10986             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10987 
10988             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10989             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
10990             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
10991          }
10992          {
10993             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
10994             using T2 = StaticMatrix<int,3UL,3UL,columnMajor>;
10995             using RT = StaticMatrix<complex<int>,3UL,3UL,columnMajor>;
10996             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
10997 
10998             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
10999             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11000             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11001          }
11002          {
11003             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11004             using T2 = StaticMatrix<int,3UL,3UL,rowMajor>;
11005             using RT = StaticMatrix<complex<int>,3UL,3UL,rowMajor>;
11006             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11007 
11008             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11009             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11010             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11011          }
11012          {
11013             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11014             using T2 = StaticMatrix<int,3UL,3UL,columnMajor>;
11015             using RT = StaticMatrix<complex<int>,3UL,3UL,columnMajor>;
11016             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11017 
11018             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11019             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11020             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11021          }
11022       }
11023 
11024       // .../HybridMatrix
11025       {
11026          {
11027             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11028             using T2 = HybridMatrix<int,8UL,6UL,rowMajor>;
11029             using RT = HybridMatrix<complex<int>,8UL,6UL,rowMajor>;
11030             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11031 
11032             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11033             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11034             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11035          }
11036          {
11037             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11038             using T2 = HybridMatrix<int,8UL,6UL,columnMajor>;
11039             using RT = HybridMatrix<complex<int>,8UL,6UL,columnMajor>;
11040             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11041 
11042             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11043             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11044             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11045          }
11046          {
11047             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11048             using T2 = HybridMatrix<int,8UL,6UL,rowMajor>;
11049             using RT = HybridMatrix<complex<int>,8UL,6UL,rowMajor>;
11050             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11051 
11052             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11053             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11054             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11055          }
11056          {
11057             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11058             using T2 = HybridMatrix<int,8UL,6UL,columnMajor>;
11059             using RT = HybridMatrix<complex<int>,8UL,6UL,columnMajor>;
11060             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11061 
11062             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11063             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11064             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11065          }
11066       }
11067 
11068       // .../DynamicMatrix
11069       {
11070          {
11071             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11072             using T2 = DynamicMatrix<int,rowMajor>;
11073             using RT = DynamicMatrix<complex<int>,rowMajor>;
11074             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11075 
11076             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11077             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11078             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11079          }
11080          {
11081             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11082             using T2 = DynamicMatrix<int,columnMajor>;
11083             using RT = DynamicMatrix<complex<int>,columnMajor>;
11084             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11085 
11086             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11087             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11088             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11089          }
11090          {
11091             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11092             using T2 = DynamicMatrix<int,rowMajor>;
11093             using RT = DynamicMatrix<complex<int>,rowMajor>;
11094             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11095 
11096             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11097             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11098             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11099          }
11100          {
11101             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11102             using T2 = DynamicMatrix<int,columnMajor>;
11103             using RT = DynamicMatrix<complex<int>,columnMajor>;
11104             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11105 
11106             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11107             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11108             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11109          }
11110       }
11111 
11112       // .../CustomMatrix
11113       {
11114          {
11115             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11116             using T2 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
11117             using RT = DynamicMatrix<complex<int>,rowMajor>;
11118             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11119 
11120             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11121             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11122             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11123          }
11124          {
11125             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11126             using T2 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
11127             using RT = DynamicMatrix<complex<int>,columnMajor>;
11128             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11129 
11130             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11131             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11132             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11133          }
11134          {
11135             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11136             using T2 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
11137             using RT = DynamicMatrix<complex<int>,rowMajor>;
11138             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11139 
11140             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11141             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11142             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11143          }
11144          {
11145             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11146             using T2 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
11147             using RT = DynamicMatrix<complex<int>,columnMajor>;
11148             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11149 
11150             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11151             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11152             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11153          }
11154       }
11155 
11156       // .../DynamicMatrix
11157       {
11158          {
11159             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11160             using T2 = UniformMatrix<int,rowMajor>;
11161             using RT = DynamicMatrix<complex<int>,rowMajor>;
11162             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11163 
11164             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11165             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11166             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11167          }
11168          {
11169             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11170             using T2 = UniformMatrix<int,columnMajor>;
11171             using RT = DynamicMatrix<complex<int>,columnMajor>;
11172             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11173 
11174             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11175             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11176             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11177          }
11178          {
11179             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11180             using T2 = UniformMatrix<int,rowMajor>;
11181             using RT = DynamicMatrix<complex<int>,rowMajor>;
11182             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11183 
11184             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11185             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11186             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11187          }
11188          {
11189             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11190             using T2 = UniformMatrix<int,columnMajor>;
11191             using RT = DynamicMatrix<complex<int>,columnMajor>;
11192             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11193 
11194             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11195             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11196             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11197          }
11198       }
11199 
11200       // .../InitializerMatrix
11201       {
11202          {
11203             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11204             using T2 = InitializerMatrix<int>;
11205             using RT = DynamicMatrix<complex<int>,rowMajor>;
11206             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11207 
11208             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11209             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11210             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11211          }
11212          {
11213             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11214             using T2 = InitializerMatrix<int>;
11215             using RT = DynamicMatrix<complex<int>,rowMajor>;
11216             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11217 
11218             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11219             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11220             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11221          }
11222       }
11223 
11224       // .../CompressedMatrix
11225       {
11226          {
11227             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11228             using T2 = CompressedMatrix<int,rowMajor>;
11229             using RT = DynamicMatrix<complex<int>,rowMajor>;
11230             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11231 
11232             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11233             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11234             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11235          }
11236          {
11237             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11238             using T2 = CompressedMatrix<int,columnMajor>;
11239             using RT = DynamicMatrix<complex<int>,rowMajor>;
11240             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11241 
11242             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11243             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11244             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11245          }
11246          {
11247             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11248             using T2 = CompressedMatrix<int,rowMajor>;
11249             using RT = DynamicMatrix<complex<int>,columnMajor>;
11250             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11251 
11252             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11253             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11254             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11255          }
11256          {
11257             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11258             using T2 = CompressedMatrix<int,columnMajor>;
11259             using RT = DynamicMatrix<complex<int>,columnMajor>;
11260             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11261 
11262             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11263             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11264             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11265          }
11266       }
11267 
11268       // .../IdentityMatrix
11269       {
11270          {
11271             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11272             using T2 = IdentityMatrix<int,rowMajor>;
11273             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11274             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11275 
11276             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11277             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11278             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11279          }
11280          {
11281             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11282             using T2 = IdentityMatrix<int,columnMajor>;
11283             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11284             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11285 
11286             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11287             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11288             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11289          }
11290          {
11291             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11292             using T2 = IdentityMatrix<int,rowMajor>;
11293             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11294             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11295 
11296             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11297             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11298             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11299          }
11300          {
11301             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11302             using T2 = IdentityMatrix<int,columnMajor>;
11303             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11304             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11305 
11306             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11307             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11308             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11309          }
11310       }
11311 
11312       // .../ZeroMatrix
11313       {
11314          {
11315             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11316             using T2 = ZeroMatrix<int,rowMajor>;
11317             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11318             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11319 
11320             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11321             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11322             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11323          }
11324          {
11325             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11326             using T2 = ZeroMatrix<int,columnMajor>;
11327             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11328             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11329 
11330             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11331             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11332             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11333          }
11334          {
11335             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11336             using T2 = ZeroMatrix<int,rowMajor>;
11337             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11338             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11339 
11340             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11341             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11342             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11343          }
11344          {
11345             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11346             using T2 = ZeroMatrix<int,columnMajor>;
11347             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11348             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11349 
11350             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11351             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11352             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11353          }
11354       }
11355 
11356       // .../SymmetricMatrix<DynamicMatrix> (real)
11357       {
11358          {
11359             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11360             using T2 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
11361             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11362             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11363 
11364             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11365             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11366             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11367          }
11368          {
11369             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11370             using T2 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
11371             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11372             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11373 
11374             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11375             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11376             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11377          }
11378          {
11379             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11380             using T2 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
11381             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11382             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11383 
11384             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11385             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11386             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11387          }
11388          {
11389             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11390             using T2 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
11391             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11392             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11393 
11394             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11395             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11396             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11397          }
11398       }
11399 
11400       // .../SymmetricMatrix<DynamicMatrix> (complex)
11401       {
11402          {
11403             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11404             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11405             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11406             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11407 
11408             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11409             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11410             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11411          }
11412          {
11413             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11414             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11415             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11416             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11417 
11418             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11419             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11420             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11421          }
11422          {
11423             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11424             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11425             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11426             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11427 
11428             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11429             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11430             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11431          }
11432          {
11433             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11434             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11435             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11436             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11437 
11438             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11439             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11440             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11441          }
11442       }
11443 
11444       // .../SymmetricMatrix<UniformMatrix>
11445       {
11446          {
11447             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11448             using T2 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
11449             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11450             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11451 
11452             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11453             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11454             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11455          }
11456          {
11457             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11458             using T2 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
11459             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11460             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11461 
11462             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11463             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11464             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11465          }
11466          {
11467             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11468             using T2 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
11469             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11470             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11471 
11472             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11473             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11474             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11475          }
11476          {
11477             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11478             using T2 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
11479             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11480             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11481 
11482             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11483             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11484             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11485          }
11486       }
11487 
11488       // .../SymmetricMatrix<ZeroMatrix>
11489       {
11490          {
11491             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11492             using T2 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
11493             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11494             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11495 
11496             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11497             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11498             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11499          }
11500          {
11501             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11502             using T2 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
11503             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11504             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11505 
11506             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11507             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11508             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11509          }
11510          {
11511             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11512             using T2 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
11513             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11514             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11515 
11516             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11517             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11518             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11519          }
11520          {
11521             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11522             using T2 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
11523             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11524             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11525 
11526             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11527             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11528             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11529          }
11530       }
11531 
11532       // .../HermitianMatrix<DynamicMatrix> (symmetric)
11533       {
11534          {
11535             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11536             using T2 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
11537             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11538             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11539 
11540             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11541             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11542             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11543          }
11544          {
11545             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11546             using T2 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
11547             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11548             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11549 
11550             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11551             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11552             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11553          }
11554          {
11555             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11556             using T2 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
11557             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11558             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11559 
11560             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11561             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11562             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11563          }
11564          {
11565             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11566             using T2 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
11567             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11568             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11569 
11570             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11571             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11572             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11573          }
11574       }
11575 
11576       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
11577       {
11578          {
11579             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11580             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11581             using RT = DynamicMatrix<complex<int>,rowMajor>;
11582             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11583 
11584             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11585             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11586             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11587          }
11588          {
11589             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11590             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11591             using RT = DynamicMatrix<complex<int>,columnMajor>;
11592             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11593 
11594             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11595             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11596             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11597          }
11598          {
11599             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11600             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11601             using RT = DynamicMatrix<complex<int>,rowMajor>;
11602             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11603 
11604             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11605             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11606             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11607          }
11608          {
11609             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11610             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11611             using RT = DynamicMatrix<complex<int>,columnMajor>;
11612             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11613 
11614             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11615             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11616             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11617          }
11618       }
11619 
11620       // .../LowerMatrix<DynamicMatrix>
11621       {
11622          {
11623             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11624             using T2 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
11625             using RT = DynamicMatrix<complex<int>,rowMajor>;
11626             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11627 
11628             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11629             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11630             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11631          }
11632          {
11633             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11634             using T2 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
11635             using RT = DynamicMatrix<complex<int>,columnMajor>;
11636             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11637 
11638             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11639             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11640             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11641          }
11642          {
11643             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11644             using T2 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
11645             using RT = DynamicMatrix<complex<int>,rowMajor>;
11646             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11647 
11648             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11649             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11650             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11651          }
11652          {
11653             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11654             using T2 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
11655             using RT = DynamicMatrix<complex<int>,columnMajor>;
11656             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11657 
11658             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11659             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11660             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11661          }
11662       }
11663 
11664       // .../UniLowerMatrix<DynamicMatrix>
11665       {
11666          {
11667             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11668             using T2 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
11669             using RT = DynamicMatrix<complex<int>,rowMajor>;
11670             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11671 
11672             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11673             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11674             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11675          }
11676          {
11677             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11678             using T2 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
11679             using RT = DynamicMatrix<complex<int>,columnMajor>;
11680             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11681 
11682             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11683             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11684             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11685          }
11686          {
11687             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11688             using T2 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
11689             using RT = DynamicMatrix<complex<int>,rowMajor>;
11690             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11691 
11692             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11693             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11694             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11695          }
11696          {
11697             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11698             using T2 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
11699             using RT = DynamicMatrix<complex<int>,columnMajor>;
11700             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11701 
11702             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11703             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11704             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11705          }
11706       }
11707 
11708       // .../StrictlyLowerMatrix<DynamicMatrix>
11709       {
11710          {
11711             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11712             using T2 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
11713             using RT = DynamicMatrix<complex<int>,rowMajor>;
11714             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11715 
11716             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11717             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11718             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11719          }
11720          {
11721             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11722             using T2 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
11723             using RT = DynamicMatrix<complex<int>,columnMajor>;
11724             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11725 
11726             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11727             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11728             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11729          }
11730          {
11731             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11732             using T2 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
11733             using RT = DynamicMatrix<complex<int>,rowMajor>;
11734             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11735 
11736             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11737             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11738             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11739          }
11740          {
11741             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11742             using T2 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
11743             using RT = DynamicMatrix<complex<int>,columnMajor>;
11744             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11745 
11746             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11747             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11748             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11749          }
11750       }
11751 
11752       // .../UpperMatrix<DynamicMatrix>
11753       {
11754          {
11755             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11756             using T2 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
11757             using RT = DynamicMatrix<complex<int>,rowMajor>;
11758             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11759 
11760             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11761             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11762             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11763          }
11764          {
11765             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11766             using T2 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
11767             using RT = DynamicMatrix<complex<int>,columnMajor>;
11768             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11769 
11770             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11771             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11772             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11773          }
11774          {
11775             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11776             using T2 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
11777             using RT = DynamicMatrix<complex<int>,rowMajor>;
11778             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11779 
11780             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11781             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11782             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11783          }
11784          {
11785             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11786             using T2 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
11787             using RT = DynamicMatrix<complex<int>,columnMajor>;
11788             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11789 
11790             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11791             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11792             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11793          }
11794       }
11795 
11796       // .../UniUpperMatrix<DynamicMatrix>
11797       {
11798          {
11799             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11800             using T2 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
11801             using RT = DynamicMatrix<complex<int>,rowMajor>;
11802             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11803 
11804             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11805             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11806             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11807          }
11808          {
11809             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11810             using T2 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
11811             using RT = DynamicMatrix<complex<int>,columnMajor>;
11812             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11813 
11814             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11815             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11816             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11817          }
11818          {
11819             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11820             using T2 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
11821             using RT = DynamicMatrix<complex<int>,rowMajor>;
11822             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11823 
11824             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11825             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11826             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11827          }
11828          {
11829             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11830             using T2 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
11831             using RT = DynamicMatrix<complex<int>,columnMajor>;
11832             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11833 
11834             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11835             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11836             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11837          }
11838       }
11839 
11840       // .../StrictlyUpperMatrix<DynamicMatrix>
11841       {
11842          {
11843             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11844             using T2 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
11845             using RT = DynamicMatrix<complex<int>,rowMajor>;
11846             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11847 
11848             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11849             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11850             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11851          }
11852          {
11853             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11854             using T2 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
11855             using RT = DynamicMatrix<complex<int>,columnMajor>;
11856             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11857 
11858             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11859             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11860             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11861          }
11862          {
11863             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11864             using T2 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
11865             using RT = DynamicMatrix<complex<int>,rowMajor>;
11866             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11867 
11868             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11869             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11870             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11871          }
11872          {
11873             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11874             using T2 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
11875             using RT = DynamicMatrix<complex<int>,columnMajor>;
11876             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11877 
11878             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11879             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11880             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11881          }
11882       }
11883 
11884       // .../DiagonalMatrix<DynamicMatrix>
11885       {
11886          {
11887             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11888             using T2 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
11889             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11890             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11891 
11892             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11893             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11894             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11895          }
11896          {
11897             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11898             using T2 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
11899             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11900             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11901 
11902             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11903             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11904             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11905          }
11906          {
11907             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11908             using T2 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
11909             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
11910             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11911 
11912             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11913             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11914             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11915          }
11916          {
11917             using T1 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11918             using T2 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
11919             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
11920             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11921 
11922             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11923             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11924             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11925          }
11926       }
11927    }
11928 
11929    // SymmetricMatrix<UniformMatrix>/... (real)
11930    {
11931       // .../StaticMatrix
11932       {
11933          {
11934             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
11935             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
11936             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
11937             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11938 
11939             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11940             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11941             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11942          }
11943          {
11944             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
11945             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
11946             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
11947             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11948 
11949             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11950             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11951             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11952          }
11953          {
11954             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
11955             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
11956             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
11957             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11958 
11959             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11960             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11961             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11962          }
11963          {
11964             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
11965             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
11966             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
11967             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11968 
11969             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11970             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11971             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11972          }
11973       }
11974 
11975       // .../HybridMatrix
11976       {
11977          {
11978             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
11979             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
11980             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
11981             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11982 
11983             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11984             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11985             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11986          }
11987          {
11988             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
11989             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
11990             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
11991             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
11992 
11993             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
11994             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
11995             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
11996          }
11997          {
11998             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
11999             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
12000             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
12001             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12002 
12003             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12004             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12005             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12006          }
12007          {
12008             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12009             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
12010             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
12011             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12012 
12013             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12014             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12015             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12016          }
12017       }
12018 
12019       // .../DynamicMatrix
12020       {
12021          {
12022             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12023             using T2 = DynamicMatrix<double,rowMajor>;
12024             using RT = DynamicMatrix<double,rowMajor>;
12025             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12026 
12027             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12028             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12029             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12030          }
12031          {
12032             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12033             using T2 = DynamicMatrix<double,columnMajor>;
12034             using RT = DynamicMatrix<double,columnMajor>;
12035             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12036 
12037             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12038             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12039             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12040          }
12041          {
12042             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12043             using T2 = DynamicMatrix<double,rowMajor>;
12044             using RT = DynamicMatrix<double,rowMajor>;
12045             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12046 
12047             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12048             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12049             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12050          }
12051          {
12052             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12053             using T2 = DynamicMatrix<double,columnMajor>;
12054             using RT = DynamicMatrix<double,columnMajor>;
12055             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12056 
12057             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12058             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12059             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12060          }
12061       }
12062 
12063       // .../CustomMatrix
12064       {
12065          {
12066             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12067             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
12068             using RT = DynamicMatrix<double,rowMajor>;
12069             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12070 
12071             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12072             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12073             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12074          }
12075          {
12076             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12077             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
12078             using RT = DynamicMatrix<double,columnMajor>;
12079             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12080 
12081             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12082             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12083             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12084          }
12085          {
12086             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12087             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
12088             using RT = DynamicMatrix<double,rowMajor>;
12089             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12090 
12091             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12092             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12093             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12094          }
12095          {
12096             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12097             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
12098             using RT = DynamicMatrix<double,columnMajor>;
12099             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12100 
12101             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12102             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12103             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12104          }
12105       }
12106 
12107       // .../UniformMatrix
12108       {
12109          {
12110             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12111             using T2 = UniformMatrix<double,rowMajor>;
12112             using RT = UniformMatrix<double,rowMajor>;
12113             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12114 
12115             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12116             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12117             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12118          }
12119          {
12120             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12121             using T2 = UniformMatrix<double,columnMajor>;
12122             using RT = UniformMatrix<double,columnMajor>;
12123             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12124 
12125             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12126             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12127             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12128          }
12129          {
12130             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12131             using T2 = UniformMatrix<double,rowMajor>;
12132             using RT = UniformMatrix<double,rowMajor>;
12133             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12134 
12135             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12136             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12137             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12138          }
12139          {
12140             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12141             using T2 = UniformMatrix<double,columnMajor>;
12142             using RT = UniformMatrix<double,columnMajor>;
12143             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12144 
12145             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12146             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12147             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12148          }
12149       }
12150 
12151       // .../InitializerMatrix
12152       {
12153          {
12154             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12155             using T2 = InitializerMatrix<double>;
12156             using RT = DynamicMatrix<double,rowMajor>;
12157             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12158 
12159             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12160             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12161             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12162          }
12163          {
12164             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12165             using T2 = InitializerMatrix<double>;
12166             using RT = DynamicMatrix<double,rowMajor>;
12167             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12168 
12169             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12170             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12171             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12172          }
12173       }
12174 
12175       // .../CompressedMatrix
12176       {
12177          {
12178             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12179             using T2 = CompressedMatrix<double,rowMajor>;
12180             using RT = DynamicMatrix<double,rowMajor>;
12181             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12182 
12183             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12184             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12185             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12186          }
12187          {
12188             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12189             using T2 = CompressedMatrix<double,columnMajor>;
12190             using RT = DynamicMatrix<double,rowMajor>;
12191             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12192 
12193             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12194             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12195             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12196          }
12197          {
12198             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12199             using T2 = CompressedMatrix<double,rowMajor>;
12200             using RT = DynamicMatrix<double,columnMajor>;
12201             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12202 
12203             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12204             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12205             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12206          }
12207          {
12208             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12209             using T2 = CompressedMatrix<double,columnMajor>;
12210             using RT = DynamicMatrix<double,columnMajor>;
12211             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12212 
12213             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12214             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12215             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12216          }
12217       }
12218 
12219       // .../IdentityMatrix
12220       {
12221          {
12222             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12223             using T2 = IdentityMatrix<double,rowMajor>;
12224             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
12225             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12226 
12227             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12228             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12229             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12230          }
12231          {
12232             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12233             using T2 = IdentityMatrix<double,columnMajor>;
12234             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
12235             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12236 
12237             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12238             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12239             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12240          }
12241          {
12242             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12243             using T2 = IdentityMatrix<double,rowMajor>;
12244             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
12245             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12246 
12247             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12248             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12249             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12250          }
12251          {
12252             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12253             using T2 = IdentityMatrix<double,columnMajor>;
12254             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
12255             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12256 
12257             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12258             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12259             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12260          }
12261       }
12262 
12263       // .../ZeroMatrix
12264       {
12265          {
12266             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12267             using T2 = ZeroMatrix<double,rowMajor>;
12268             using RT = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
12269             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12270 
12271             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12272             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12273             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12274          }
12275          {
12276             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12277             using T2 = ZeroMatrix<double,columnMajor>;
12278             using RT = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
12279             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12280 
12281             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12282             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12283             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12284          }
12285          {
12286             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12287             using T2 = ZeroMatrix<double,rowMajor>;
12288             using RT = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
12289             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12290 
12291             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12292             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12293             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12294          }
12295          {
12296             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12297             using T2 = ZeroMatrix<double,columnMajor>;
12298             using RT = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
12299             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12300 
12301             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12302             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12303             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12304          }
12305       }
12306 
12307       // .../SymmetricMatrix<DynamicMatrix> (real)
12308       {
12309          {
12310             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12311             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
12312             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
12313             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12314 
12315             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12316             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12317             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12318          }
12319          {
12320             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12321             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
12322             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
12323             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12324 
12325             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12326             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12327             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12328          }
12329          {
12330             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12331             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
12332             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
12333             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12334 
12335             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12336             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12337             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12338          }
12339          {
12340             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12341             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
12342             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
12343             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12344 
12345             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12346             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12347             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12348          }
12349       }
12350 
12351       // .../SymmetricMatrix<DynamicMatrix> (complex)
12352       {
12353          {
12354             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12355             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
12356             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
12357             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12358 
12359             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12360             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12361             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12362          }
12363          {
12364             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12365             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
12366             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
12367             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12368 
12369             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12370             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12371             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12372          }
12373          {
12374             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12375             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
12376             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
12377             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12378 
12379             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12380             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12381             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12382          }
12383          {
12384             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12385             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
12386             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
12387             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12388 
12389             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12390             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12391             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12392          }
12393       }
12394 
12395       // .../SymmetricMatrix<UniformMatrix>
12396       {
12397          {
12398             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12399             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
12400             using RT = UniformMatrix<double,rowMajor>;
12401             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12402 
12403             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12404             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12405             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12406          }
12407          {
12408             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12409             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
12410             using RT = UniformMatrix<double,rowMajor>;
12411             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12412 
12413             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12414             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12415             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12416          }
12417          {
12418             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12419             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
12420             using RT = UniformMatrix<double,rowMajor>;
12421             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12422 
12423             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12424             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12425             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12426          }
12427          {
12428             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12429             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
12430             using RT = UniformMatrix<double,columnMajor>;
12431             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12432 
12433             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12434             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12435             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12436          }
12437       }
12438 
12439       // .../SymmetricMatrix<ZeroMatrix>
12440       {
12441          {
12442             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12443             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
12444             using RT = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
12445             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12446 
12447             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12448             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12449             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12450          }
12451          {
12452             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12453             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
12454             using RT = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
12455             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12456 
12457             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12458             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12459             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12460          }
12461          {
12462             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12463             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
12464             using RT = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
12465             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12466 
12467             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12468             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12469             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12470          }
12471          {
12472             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12473             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
12474             using RT = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
12475             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12476 
12477             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12478             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12479             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12480          }
12481       }
12482 
12483       // .../HermitianMatrix<DynamicMatrix> (symmetric)
12484       {
12485          {
12486             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12487             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
12488             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
12489             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12490 
12491             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12492             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12493             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12494          }
12495          {
12496             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12497             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
12498             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
12499             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12500 
12501             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12502             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12503             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12504          }
12505          {
12506             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12507             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
12508             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
12509             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12510 
12511             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12512             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12513             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12514          }
12515          {
12516             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12517             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
12518             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
12519             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12520 
12521             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12522             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12523             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12524          }
12525       }
12526 
12527       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
12528       {
12529          {
12530             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12531             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
12532             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
12533             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12534 
12535             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12536             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12537             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12538          }
12539          {
12540             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12541             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
12542             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
12543             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12544 
12545             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12546             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12547             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12548          }
12549          {
12550             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12551             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
12552             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
12553             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12554 
12555             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12556             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12557             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12558          }
12559          {
12560             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12561             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
12562             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
12563             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12564 
12565             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12566             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12567             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12568          }
12569       }
12570 
12571       // .../LowerMatrix<DynamicMatrix>
12572       {
12573          {
12574             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12575             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
12576             using RT = DynamicMatrix<double,rowMajor>;
12577             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12578 
12579             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12580             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12581             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12582          }
12583          {
12584             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12585             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
12586             using RT = DynamicMatrix<double,columnMajor>;
12587             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12588 
12589             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12590             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12591             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12592          }
12593          {
12594             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12595             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
12596             using RT = DynamicMatrix<double,rowMajor>;
12597             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12598 
12599             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12600             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12601             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12602          }
12603          {
12604             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12605             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
12606             using RT = DynamicMatrix<double,columnMajor>;
12607             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12608 
12609             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12610             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12611             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12612          }
12613       }
12614 
12615       // .../UniLowerMatrix<DynamicMatrix>
12616       {
12617          {
12618             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12619             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
12620             using RT = DynamicMatrix<double,rowMajor>;
12621             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12622 
12623             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12624             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12625             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12626          }
12627          {
12628             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12629             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
12630             using RT = DynamicMatrix<double,columnMajor>;
12631             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12632 
12633             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12634             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12635             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12636          }
12637          {
12638             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12639             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
12640             using RT = DynamicMatrix<double,rowMajor>;
12641             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12642 
12643             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12644             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12645             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12646          }
12647          {
12648             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12649             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
12650             using RT = DynamicMatrix<double,columnMajor>;
12651             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12652 
12653             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12654             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12655             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12656          }
12657       }
12658 
12659       // .../StrictlyLowerMatrix<DynamicMatrix>
12660       {
12661          {
12662             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12663             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
12664             using RT = DynamicMatrix<double,rowMajor>;
12665             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12666 
12667             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12668             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12669             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12670          }
12671          {
12672             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12673             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
12674             using RT = DynamicMatrix<double,columnMajor>;
12675             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12676 
12677             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12678             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12679             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12680          }
12681          {
12682             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12683             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
12684             using RT = DynamicMatrix<double,rowMajor>;
12685             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12686 
12687             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12688             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12689             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12690          }
12691          {
12692             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12693             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
12694             using RT = DynamicMatrix<double,columnMajor>;
12695             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12696 
12697             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12698             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12699             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12700          }
12701       }
12702 
12703       // .../UpperMatrix<DynamicMatrix>
12704       {
12705          {
12706             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12707             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
12708             using RT = DynamicMatrix<double,rowMajor>;
12709             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12710 
12711             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12712             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12713             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12714          }
12715          {
12716             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12717             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
12718             using RT = DynamicMatrix<double,columnMajor>;
12719             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12720 
12721             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12722             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12723             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12724          }
12725          {
12726             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12727             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
12728             using RT = DynamicMatrix<double,rowMajor>;
12729             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12730 
12731             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12732             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12733             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12734          }
12735          {
12736             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12737             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
12738             using RT = DynamicMatrix<double,columnMajor>;
12739             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12740 
12741             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12742             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12743             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12744          }
12745       }
12746 
12747       // .../UniUpperMatrix<DynamicMatrix>
12748       {
12749          {
12750             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12751             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
12752             using RT = DynamicMatrix<double,rowMajor>;
12753             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12754 
12755             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12756             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12757             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12758          }
12759          {
12760             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12761             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
12762             using RT = DynamicMatrix<double,columnMajor>;
12763             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12764 
12765             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12766             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12767             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12768          }
12769          {
12770             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12771             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
12772             using RT = DynamicMatrix<double,rowMajor>;
12773             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12774 
12775             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12776             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12777             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12778          }
12779          {
12780             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12781             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
12782             using RT = DynamicMatrix<double,columnMajor>;
12783             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12784 
12785             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12786             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12787             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12788          }
12789       }
12790 
12791       // .../StrictlyUpperMatrix<DynamicMatrix>
12792       {
12793          {
12794             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12795             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
12796             using RT = DynamicMatrix<double,rowMajor>;
12797             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12798 
12799             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12800             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12801             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12802          }
12803          {
12804             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12805             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
12806             using RT = DynamicMatrix<double,columnMajor>;
12807             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12808 
12809             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12810             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12811             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12812          }
12813          {
12814             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12815             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
12816             using RT = DynamicMatrix<double,rowMajor>;
12817             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12818 
12819             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12820             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12821             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12822          }
12823          {
12824             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12825             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
12826             using RT = DynamicMatrix<double,columnMajor>;
12827             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12828 
12829             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12830             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12831             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12832          }
12833       }
12834 
12835       // .../DiagonalMatrix<DynamicMatrix>
12836       {
12837          {
12838             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12839             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
12840             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
12841             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12842 
12843             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12844             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12845             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12846          }
12847          {
12848             using T1 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
12849             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
12850             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
12851             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12852 
12853             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12854             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12855             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12856          }
12857          {
12858             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12859             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
12860             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
12861             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12862 
12863             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12864             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12865             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12866          }
12867          {
12868             using T1 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
12869             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
12870             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
12871             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12872 
12873             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12874             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12875             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12876          }
12877       }
12878    }
12879 
12880    // SymmetricMatrix<ZeroMatrix>/... (real)
12881    {
12882       // .../StaticMatrix
12883       {
12884          {
12885             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
12886             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
12887             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
12888             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12889 
12890             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12891             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12892             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12893          }
12894          {
12895             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
12896             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
12897             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
12898             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12899 
12900             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12901             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12902             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12903          }
12904          {
12905             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
12906             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
12907             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
12908             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12909 
12910             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12911             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12912             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12913          }
12914          {
12915             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
12916             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
12917             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
12918             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12919 
12920             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12921             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12922             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12923          }
12924       }
12925 
12926       // .../HybridMatrix
12927       {
12928          {
12929             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
12930             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
12931             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
12932             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12933 
12934             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12935             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12936             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12937          }
12938          {
12939             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
12940             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
12941             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
12942             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12943 
12944             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12945             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12946             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12947          }
12948          {
12949             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
12950             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
12951             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
12952             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12953 
12954             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12955             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12956             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12957          }
12958          {
12959             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
12960             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
12961             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
12962             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12963 
12964             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12965             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12966             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12967          }
12968       }
12969 
12970       // .../DynamicMatrix
12971       {
12972          {
12973             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
12974             using T2 = DynamicMatrix<double,rowMajor>;
12975             using RT = DynamicMatrix<double,rowMajor>;
12976             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12977 
12978             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12979             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12980             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12981          }
12982          {
12983             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
12984             using T2 = DynamicMatrix<double,columnMajor>;
12985             using RT = DynamicMatrix<double,columnMajor>;
12986             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12987 
12988             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12989             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
12990             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
12991          }
12992          {
12993             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
12994             using T2 = DynamicMatrix<double,rowMajor>;
12995             using RT = DynamicMatrix<double,rowMajor>;
12996             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
12997 
12998             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
12999             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13000             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13001          }
13002          {
13003             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13004             using T2 = DynamicMatrix<double,columnMajor>;
13005             using RT = DynamicMatrix<double,columnMajor>;
13006             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13007 
13008             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13009             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13010             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13011          }
13012       }
13013 
13014       // .../CustomMatrix
13015       {
13016          {
13017             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13018             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
13019             using RT = DynamicMatrix<double,rowMajor>;
13020             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13021 
13022             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13023             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13024             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13025          }
13026          {
13027             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13028             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
13029             using RT = DynamicMatrix<double,columnMajor>;
13030             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13031 
13032             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13033             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13034             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13035          }
13036          {
13037             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13038             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
13039             using RT = DynamicMatrix<double,rowMajor>;
13040             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13041 
13042             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13043             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13044             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13045          }
13046          {
13047             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13048             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
13049             using RT = DynamicMatrix<double,columnMajor>;
13050             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13051 
13052             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13053             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13054             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13055          }
13056       }
13057 
13058       // .../UniformMatrix
13059       {
13060          {
13061             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13062             using T2 = UniformMatrix<double,rowMajor>;
13063             using RT = UniformMatrix<double,rowMajor>;
13064             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13065 
13066             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13067             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13068             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13069          }
13070          {
13071             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13072             using T2 = UniformMatrix<double,columnMajor>;
13073             using RT = UniformMatrix<double,columnMajor>;
13074             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13075 
13076             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13077             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13078             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13079          }
13080          {
13081             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13082             using T2 = UniformMatrix<double,rowMajor>;
13083             using RT = UniformMatrix<double,rowMajor>;
13084             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13085 
13086             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13087             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13088             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13089          }
13090          {
13091             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13092             using T2 = UniformMatrix<double,columnMajor>;
13093             using RT = UniformMatrix<double,columnMajor>;
13094             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13095 
13096             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13097             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13098             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13099          }
13100       }
13101 
13102       // .../InitializerMatrix
13103       {
13104          {
13105             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13106             using T2 = InitializerMatrix<double>;
13107             using RT = DynamicMatrix<double,rowMajor>;
13108             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13109 
13110             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13111             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13112             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13113          }
13114          {
13115             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13116             using T2 = InitializerMatrix<double>;
13117             using RT = DynamicMatrix<double,rowMajor>;
13118             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13119 
13120             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13121             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13122             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13123          }
13124       }
13125 
13126       // .../CompressedMatrix
13127       {
13128          {
13129             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13130             using T2 = CompressedMatrix<double,rowMajor>;
13131             using RT = CompressedMatrix<double,rowMajor>;
13132             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13133 
13134             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13135             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13136             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13137          }
13138          {
13139             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13140             using T2 = CompressedMatrix<double,columnMajor>;
13141             using RT = CompressedMatrix<double,columnMajor>;
13142             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13143 
13144             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13145             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13146             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13147          }
13148          {
13149             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13150             using T2 = CompressedMatrix<double,rowMajor>;
13151             using RT = CompressedMatrix<double,rowMajor>;
13152             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13153 
13154             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13155             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13156             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13157          }
13158          {
13159             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13160             using T2 = CompressedMatrix<double,columnMajor>;
13161             using RT = CompressedMatrix<double,columnMajor>;
13162             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13163 
13164             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13165             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13166             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13167          }
13168       }
13169 
13170       // .../IdentityMatrix
13171       {
13172          {
13173             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13174             using T2 = IdentityMatrix<double,rowMajor>;
13175             using RT = IdentityMatrix<double,rowMajor>;
13176             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13177 
13178             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13179             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13180             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13181          }
13182          {
13183             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13184             using T2 = IdentityMatrix<double,columnMajor>;
13185             using RT = IdentityMatrix<double,columnMajor>;
13186             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13187 
13188             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13189             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13190             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13191          }
13192          {
13193             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13194             using T2 = IdentityMatrix<double,rowMajor>;
13195             using RT = IdentityMatrix<double,rowMajor>;
13196             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13197 
13198             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13199             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13200             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13201          }
13202          {
13203             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13204             using T2 = IdentityMatrix<double,columnMajor>;
13205             using RT = IdentityMatrix<double,columnMajor>;
13206             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13207 
13208             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13209             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13210             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13211          }
13212       }
13213 
13214       // .../ZeroMatrix
13215       {
13216          {
13217             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13218             using T2 = ZeroMatrix<double,rowMajor>;
13219             using RT = ZeroMatrix<double,rowMajor>;
13220             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13221 
13222             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13223             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13224             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13225          }
13226          {
13227             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13228             using T2 = ZeroMatrix<double,columnMajor>;
13229             using RT = ZeroMatrix<double,rowMajor>;
13230             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13231 
13232             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13233             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13234             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13235          }
13236          {
13237             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13238             using T2 = ZeroMatrix<double,rowMajor>;
13239             using RT = ZeroMatrix<double,rowMajor>;
13240             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13241 
13242             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13243             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13244             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13245          }
13246          {
13247             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13248             using T2 = ZeroMatrix<double,columnMajor>;
13249             using RT = ZeroMatrix<double,columnMajor>;
13250             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13251 
13252             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13253             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13254             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13255          }
13256       }
13257 
13258       // .../SymmetricMatrix<DynamicMatrix> (real)
13259       {
13260          {
13261             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13262             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
13263             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
13264             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13265 
13266             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13267             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13268             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13269          }
13270          {
13271             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13272             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
13273             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
13274             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13275 
13276             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13277             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13278             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13279          }
13280          {
13281             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13282             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
13283             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
13284             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13285 
13286             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13287             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13288             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13289          }
13290          {
13291             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13292             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
13293             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
13294             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13295 
13296             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13297             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13298             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13299          }
13300       }
13301 
13302       // .../SymmetricMatrix<DynamicMatrix> (complex)
13303       {
13304          {
13305             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13306             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
13307             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
13308             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13309 
13310             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13311             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13312             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13313          }
13314          {
13315             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13316             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
13317             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
13318             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13319 
13320             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13321             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13322             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13323          }
13324          {
13325             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13326             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
13327             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
13328             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13329 
13330             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13331             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13332             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13333          }
13334          {
13335             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13336             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
13337             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
13338             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13339 
13340             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13341             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13342             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13343          }
13344       }
13345 
13346       // .../SymmetricMatrix<UniformMatrix>
13347       {
13348          {
13349             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13350             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
13351             using RT = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
13352             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13353 
13354             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13355             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13356             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13357          }
13358          {
13359             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13360             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
13361             using RT = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
13362             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13363 
13364             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13365             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13366             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13367          }
13368          {
13369             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13370             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
13371             using RT = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
13372             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13373 
13374             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13375             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13376             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13377          }
13378          {
13379             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13380             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
13381             using RT = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
13382             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13383 
13384             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13385             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13386             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13387          }
13388       }
13389 
13390       // .../SymmetricMatrix<ZeroMatrix>
13391       {
13392          {
13393             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13394             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
13395             using RT = ZeroMatrix<double,rowMajor>;
13396             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13397 
13398             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13399             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13400             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13401          }
13402          {
13403             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13404             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
13405             using RT = ZeroMatrix<double,rowMajor>;
13406             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13407 
13408             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13409             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13410             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13411          }
13412          {
13413             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13414             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
13415             using RT = ZeroMatrix<double,rowMajor>;
13416             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13417 
13418             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13419             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13420             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13421          }
13422          {
13423             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13424             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
13425             using RT = ZeroMatrix<double,columnMajor>;
13426             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13427 
13428             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13429             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13430             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13431          }
13432       }
13433 
13434       // .../HermitianMatrix<DynamicMatrix> (symmetric)
13435       {
13436          {
13437             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13438             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
13439             using RT = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
13440             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13441 
13442             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13443             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13444             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13445          }
13446          {
13447             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13448             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
13449             using RT = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
13450             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13451 
13452             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13453             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13454             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13455          }
13456          {
13457             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13458             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
13459             using RT = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
13460             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13461 
13462             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13463             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13464             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13465          }
13466          {
13467             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13468             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
13469             using RT = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
13470             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13471 
13472             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13473             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13474             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13475          }
13476       }
13477 
13478       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
13479       {
13480          {
13481             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13482             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
13483             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
13484             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13485 
13486             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13487             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13488             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13489          }
13490          {
13491             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13492             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
13493             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
13494             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13495 
13496             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13497             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13498             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13499          }
13500          {
13501             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13502             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
13503             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
13504             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13505 
13506             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13507             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13508             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13509          }
13510          {
13511             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13512             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
13513             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
13514             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13515 
13516             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13517             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13518             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13519          }
13520       }
13521 
13522       // .../LowerMatrix<DynamicMatrix>
13523       {
13524          {
13525             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13526             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
13527             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
13528             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13529 
13530             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13531             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13532             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13533          }
13534          {
13535             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13536             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
13537             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
13538             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13539 
13540             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13541             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13542             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13543          }
13544          {
13545             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13546             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
13547             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
13548             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13549 
13550             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13551             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13552             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13553          }
13554          {
13555             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13556             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
13557             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
13558             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13559 
13560             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13561             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13562             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13563          }
13564       }
13565 
13566       // .../UniLowerMatrix<DynamicMatrix>
13567       {
13568          {
13569             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13570             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
13571             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
13572             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13573 
13574             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13575             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13576             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13577          }
13578          {
13579             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13580             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
13581             using RT = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
13582             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13583 
13584             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13585             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13586             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13587          }
13588          {
13589             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13590             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
13591             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
13592             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13593 
13594             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13595             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13596             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13597          }
13598          {
13599             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13600             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
13601             using RT = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
13602             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13603 
13604             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13605             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13606             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13607          }
13608       }
13609 
13610       // .../StrictlyLowerMatrix<DynamicMatrix>
13611       {
13612          {
13613             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13614             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
13615             using RT = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
13616             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13617 
13618             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13619             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13620             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13621          }
13622          {
13623             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13624             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
13625             using RT = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
13626             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13627 
13628             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13629             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13630             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13631          }
13632          {
13633             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13634             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
13635             using RT = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
13636             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13637 
13638             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13639             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13640             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13641          }
13642          {
13643             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13644             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
13645             using RT = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
13646             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13647 
13648             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13649             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13650             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13651          }
13652       }
13653 
13654       // .../UpperMatrix<DynamicMatrix>
13655       {
13656          {
13657             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13658             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
13659             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
13660             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13661 
13662             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13663             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13664             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13665          }
13666          {
13667             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13668             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
13669             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
13670             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13671 
13672             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13673             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13674             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13675          }
13676          {
13677             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13678             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
13679             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
13680             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13681 
13682             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13683             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13684             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13685          }
13686          {
13687             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13688             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
13689             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
13690             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13691 
13692             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13693             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13694             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13695          }
13696       }
13697 
13698       // .../UniUpperMatrix<DynamicMatrix>
13699       {
13700          {
13701             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13702             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
13703             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
13704             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13705 
13706             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13707             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13708             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13709          }
13710          {
13711             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13712             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
13713             using RT = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
13714             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13715 
13716             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13717             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13718             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13719          }
13720          {
13721             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13722             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
13723             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
13724             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13725 
13726             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13727             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13728             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13729          }
13730          {
13731             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13732             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
13733             using RT = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
13734             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13735 
13736             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13737             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13738             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13739          }
13740       }
13741 
13742       // .../StrictlyUpperMatrix<DynamicMatrix>
13743       {
13744          {
13745             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13746             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
13747             using RT = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
13748             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13749 
13750             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13751             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13752             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13753          }
13754          {
13755             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13756             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
13757             using RT = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
13758             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13759 
13760             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13761             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13762             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13763          }
13764          {
13765             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13766             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
13767             using RT = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
13768             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13769 
13770             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13771             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13772             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13773          }
13774          {
13775             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13776             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
13777             using RT = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
13778             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13779 
13780             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13781             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13782             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13783          }
13784       }
13785 
13786       // .../DiagonalMatrix<DynamicMatrix>
13787       {
13788          {
13789             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13790             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
13791             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
13792             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13793 
13794             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13795             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13796             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13797          }
13798          {
13799             using T1 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
13800             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
13801             using RT = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
13802             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13803 
13804             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13805             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13806             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13807          }
13808          {
13809             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13810             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
13811             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
13812             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13813 
13814             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13815             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13816             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13817          }
13818          {
13819             using T1 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
13820             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
13821             using RT = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
13822             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13823 
13824             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13825             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13826             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13827          }
13828       }
13829    }
13830 
13831    // HermitianMatrix<DynamicMatrix>/... (symmetric)
13832    {
13833       // .../StaticMatrix
13834       {
13835          {
13836             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
13837             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
13838             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
13839             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13840 
13841             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13842             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13843             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13844          }
13845          {
13846             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
13847             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
13848             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
13849             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13850 
13851             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13852             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13853             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13854          }
13855          {
13856             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
13857             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
13858             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
13859             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13860 
13861             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13862             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13863             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13864          }
13865          {
13866             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
13867             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
13868             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
13869             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13870 
13871             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13872             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13873             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13874          }
13875       }
13876 
13877       // .../HybridMatrix
13878       {
13879          {
13880             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
13881             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
13882             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
13883             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13884 
13885             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13886             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13887             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13888          }
13889          {
13890             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
13891             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
13892             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
13893             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13894 
13895             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13896             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13897             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13898          }
13899          {
13900             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
13901             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
13902             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
13903             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13904 
13905             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13906             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13907             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13908          }
13909          {
13910             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
13911             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
13912             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
13913             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13914 
13915             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13916             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13917             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13918          }
13919       }
13920 
13921       // .../DynamicMatrix
13922       {
13923          {
13924             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
13925             using T2 = DynamicMatrix<double,rowMajor>;
13926             using RT = DynamicMatrix<double,rowMajor>;
13927             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13928 
13929             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13930             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13931             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13932          }
13933          {
13934             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
13935             using T2 = DynamicMatrix<double,columnMajor>;
13936             using RT = DynamicMatrix<double,columnMajor>;
13937             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13938 
13939             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13940             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13941             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13942          }
13943          {
13944             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
13945             using T2 = DynamicMatrix<double,rowMajor>;
13946             using RT = DynamicMatrix<double,rowMajor>;
13947             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13948 
13949             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13950             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13951             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13952          }
13953          {
13954             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
13955             using T2 = DynamicMatrix<double,columnMajor>;
13956             using RT = DynamicMatrix<double,columnMajor>;
13957             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13958 
13959             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13960             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13961             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13962          }
13963       }
13964 
13965       // .../CustomMatrix
13966       {
13967          {
13968             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
13969             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
13970             using RT = DynamicMatrix<double,rowMajor>;
13971             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13972 
13973             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13974             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13975             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13976          }
13977          {
13978             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
13979             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
13980             using RT = DynamicMatrix<double,columnMajor>;
13981             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13982 
13983             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13984             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13985             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13986          }
13987          {
13988             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
13989             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
13990             using RT = DynamicMatrix<double,rowMajor>;
13991             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
13992 
13993             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
13994             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
13995             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
13996          }
13997          {
13998             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
13999             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
14000             using RT = DynamicMatrix<double,columnMajor>;
14001             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14002 
14003             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14004             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14005             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14006          }
14007       }
14008 
14009       // .../UniformMatrix
14010       {
14011          {
14012             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14013             using T2 = UniformMatrix<double,rowMajor>;
14014             using RT = DynamicMatrix<double,rowMajor>;
14015             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14016 
14017             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14018             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14019             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14020          }
14021          {
14022             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14023             using T2 = UniformMatrix<double,columnMajor>;
14024             using RT = DynamicMatrix<double,columnMajor>;
14025             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14026 
14027             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14028             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14029             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14030          }
14031          {
14032             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14033             using T2 = UniformMatrix<double,rowMajor>;
14034             using RT = DynamicMatrix<double,rowMajor>;
14035             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14036 
14037             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14038             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14039             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14040          }
14041          {
14042             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14043             using T2 = UniformMatrix<double,columnMajor>;
14044             using RT = DynamicMatrix<double,columnMajor>;
14045             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14046 
14047             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14048             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14049             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14050          }
14051       }
14052 
14053       // .../InitializerMatrix
14054       {
14055          {
14056             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14057             using T2 = InitializerMatrix<double>;
14058             using RT = DynamicMatrix<double,rowMajor>;
14059             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14060 
14061             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14062             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14063             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14064          }
14065          {
14066             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14067             using T2 = InitializerMatrix<double>;
14068             using RT = DynamicMatrix<double,rowMajor>;
14069             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14070 
14071             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14072             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14073             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14074          }
14075       }
14076 
14077       // .../CompressedMatrix
14078       {
14079          {
14080             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14081             using T2 = CompressedMatrix<double,rowMajor>;
14082             using RT = DynamicMatrix<double,rowMajor>;
14083             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14084 
14085             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14086             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14087             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14088          }
14089          {
14090             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14091             using T2 = CompressedMatrix<double,columnMajor>;
14092             using RT = DynamicMatrix<double,rowMajor>;
14093             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14094 
14095             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14096             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14097             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14098          }
14099          {
14100             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14101             using T2 = CompressedMatrix<double,rowMajor>;
14102             using RT = DynamicMatrix<double,columnMajor>;
14103             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14104 
14105             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14106             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14107             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14108          }
14109          {
14110             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14111             using T2 = CompressedMatrix<double,columnMajor>;
14112             using RT = DynamicMatrix<double,columnMajor>;
14113             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14114 
14115             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14116             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14117             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14118          }
14119       }
14120 
14121       // .../IdentityMatrix
14122       {
14123          {
14124             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14125             using T2 = IdentityMatrix<double,rowMajor>;
14126             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14127             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14128 
14129             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14130             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14131             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14132          }
14133          {
14134             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14135             using T2 = IdentityMatrix<double,columnMajor>;
14136             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14137             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14138 
14139             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14140             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14141             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14142          }
14143          {
14144             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14145             using T2 = IdentityMatrix<double,rowMajor>;
14146             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
14147             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14148 
14149             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14150             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14151             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14152          }
14153          {
14154             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14155             using T2 = IdentityMatrix<double,columnMajor>;
14156             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
14157             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14158 
14159             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14160             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14161             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14162          }
14163       }
14164 
14165       // .../ZeroMatrix
14166       {
14167          {
14168             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14169             using T2 = ZeroMatrix<double,rowMajor>;
14170             using RT = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
14171             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14172 
14173             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14174             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14175             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14176          }
14177          {
14178             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14179             using T2 = ZeroMatrix<double,columnMajor>;
14180             using RT = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
14181             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14182 
14183             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14184             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14185             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14186          }
14187          {
14188             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14189             using T2 = ZeroMatrix<double,rowMajor>;
14190             using RT = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
14191             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14192 
14193             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14194             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14195             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14196          }
14197          {
14198             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14199             using T2 = ZeroMatrix<double,columnMajor>;
14200             using RT = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
14201             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14202 
14203             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14204             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14205             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14206          }
14207       }
14208 
14209       // .../SymmetricMatrix<DynamicMatrix> (real)
14210       {
14211          {
14212             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14213             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14214             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14215             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14216 
14217             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14218             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14219             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14220          }
14221          {
14222             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14223             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
14224             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14225             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14226 
14227             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14228             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14229             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14230          }
14231          {
14232             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14233             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14234             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14235             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14236 
14237             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14238             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14239             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14240          }
14241          {
14242             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14243             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
14244             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
14245             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14246 
14247             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14248             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14249             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14250          }
14251       }
14252 
14253       // .../SymmetricMatrix<DynamicMatrix> (complex)
14254       {
14255          {
14256             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14257             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14258             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14259             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14260 
14261             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14262             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14263             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14264          }
14265          {
14266             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14267             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14268             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14269             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14270 
14271             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14272             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14273             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14274          }
14275          {
14276             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14277             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14278             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14279             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14280 
14281             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14282             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14283             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14284          }
14285          {
14286             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14287             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14288             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14289             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14290 
14291             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14292             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14293             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14294          }
14295       }
14296 
14297       // .../SymmetricMatrix<UniformMatrix>
14298       {
14299          {
14300             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14301             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
14302             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14303             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14304 
14305             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14306             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14307             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14308          }
14309          {
14310             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14311             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
14312             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14313             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14314 
14315             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14316             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14317             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14318          }
14319          {
14320             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14321             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
14322             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14323             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14324 
14325             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14326             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14327             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14328          }
14329          {
14330             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14331             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
14332             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
14333             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14334 
14335             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14336             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14337             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14338          }
14339       }
14340 
14341       // .../SymmetricMatrix<ZeroMatrix>
14342       {
14343          {
14344             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14345             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
14346             using RT = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
14347             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14348 
14349             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14350             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14351             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14352          }
14353          {
14354             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14355             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
14356             using RT = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
14357             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14358 
14359             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14360             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14361             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14362          }
14363          {
14364             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14365             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
14366             using RT = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
14367             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14368 
14369             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14370             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14371             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14372          }
14373          {
14374             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14375             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
14376             using RT = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
14377             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14378 
14379             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14380             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14381             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14382          }
14383       }
14384 
14385       // .../HermitianMatrix<DynamicMatrix> (symmetric)
14386       {
14387          {
14388             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14389             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
14390             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14391             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14392 
14393             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14394             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14395             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14396          }
14397          {
14398             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14399             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
14400             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14401             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14402 
14403             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14404             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14405             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14406          }
14407          {
14408             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14409             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
14410             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14411             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14412 
14413             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14414             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14415             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14416          }
14417          {
14418             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14419             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
14420             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
14421             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14422 
14423             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14424             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14425             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14426          }
14427       }
14428 
14429       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
14430       {
14431          {
14432             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14433             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14434             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14435             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14436 
14437             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14438             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14439             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14440          }
14441          {
14442             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14443             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14444             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14445             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14446 
14447             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14448             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14449             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14450          }
14451          {
14452             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14453             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14454             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14455             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14456 
14457             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14458             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14459             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14460          }
14461          {
14462             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14463             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14464             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14465             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14466 
14467             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14468             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14469             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14470          }
14471       }
14472 
14473       // .../LowerMatrix<DynamicMatrix>
14474       {
14475          {
14476             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14477             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
14478             using RT = DynamicMatrix<double,rowMajor>;
14479             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14480 
14481             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14482             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14483             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14484          }
14485          {
14486             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14487             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
14488             using RT = DynamicMatrix<double,columnMajor>;
14489             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14490 
14491             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14492             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14493             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14494          }
14495          {
14496             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14497             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
14498             using RT = DynamicMatrix<double,rowMajor>;
14499             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14500 
14501             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14502             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14503             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14504          }
14505          {
14506             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14507             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
14508             using RT = DynamicMatrix<double,columnMajor>;
14509             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14510 
14511             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14512             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14513             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14514          }
14515       }
14516 
14517       // .../UniLowerMatrix<DynamicMatrix>
14518       {
14519          {
14520             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14521             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
14522             using RT = DynamicMatrix<double,rowMajor>;
14523             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14524 
14525             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14526             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14527             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14528          }
14529          {
14530             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14531             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
14532             using RT = DynamicMatrix<double,columnMajor>;
14533             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14534 
14535             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14536             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14537             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14538          }
14539          {
14540             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14541             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
14542             using RT = DynamicMatrix<double,rowMajor>;
14543             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14544 
14545             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14546             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14547             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14548          }
14549          {
14550             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14551             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
14552             using RT = DynamicMatrix<double,columnMajor>;
14553             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14554 
14555             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14556             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14557             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14558          }
14559       }
14560 
14561       // .../StrictlyLowerMatrix<DynamicMatrix>
14562       {
14563          {
14564             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14565             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
14566             using RT = DynamicMatrix<double,rowMajor>;
14567             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14568 
14569             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14570             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14571             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14572          }
14573          {
14574             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14575             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
14576             using RT = DynamicMatrix<double,columnMajor>;
14577             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14578 
14579             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14580             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14581             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14582          }
14583          {
14584             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14585             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
14586             using RT = DynamicMatrix<double,rowMajor>;
14587             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14588 
14589             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14590             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14591             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14592          }
14593          {
14594             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14595             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
14596             using RT = DynamicMatrix<double,columnMajor>;
14597             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14598 
14599             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14600             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14601             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14602          }
14603       }
14604 
14605       // .../UpperMatrix<DynamicMatrix>
14606       {
14607          {
14608             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14609             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
14610             using RT = DynamicMatrix<double,rowMajor>;
14611             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14612 
14613             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14614             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14615             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14616          }
14617          {
14618             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14619             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
14620             using RT = DynamicMatrix<double,columnMajor>;
14621             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14622 
14623             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14624             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14625             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14626          }
14627          {
14628             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14629             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
14630             using RT = DynamicMatrix<double,rowMajor>;
14631             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14632 
14633             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14634             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14635             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14636          }
14637          {
14638             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14639             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
14640             using RT = DynamicMatrix<double,columnMajor>;
14641             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14642 
14643             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14644             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14645             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14646          }
14647       }
14648 
14649       // .../UniUpperMatrix<DynamicMatrix>
14650       {
14651          {
14652             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14653             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
14654             using RT = DynamicMatrix<double,rowMajor>;
14655             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14656 
14657             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14658             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14659             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14660          }
14661          {
14662             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14663             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
14664             using RT = DynamicMatrix<double,columnMajor>;
14665             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14666 
14667             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14668             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14669             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14670          }
14671          {
14672             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14673             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
14674             using RT = DynamicMatrix<double,rowMajor>;
14675             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14676 
14677             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14678             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14679             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14680          }
14681          {
14682             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14683             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
14684             using RT = DynamicMatrix<double,columnMajor>;
14685             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14686 
14687             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14688             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14689             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14690          }
14691       }
14692 
14693       // .../StrictlyUpperMatrix<DynamicMatrix>
14694       {
14695          {
14696             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14697             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
14698             using RT = DynamicMatrix<double,rowMajor>;
14699             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14700 
14701             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14702             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14703             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14704          }
14705          {
14706             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14707             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
14708             using RT = DynamicMatrix<double,columnMajor>;
14709             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14710 
14711             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14712             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14713             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14714          }
14715          {
14716             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14717             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
14718             using RT = DynamicMatrix<double,rowMajor>;
14719             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14720 
14721             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14722             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14723             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14724          }
14725          {
14726             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14727             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
14728             using RT = DynamicMatrix<double,columnMajor>;
14729             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14730 
14731             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14732             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14733             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14734          }
14735       }
14736 
14737       // .../DiagonalMatrix<DynamicMatrix>
14738       {
14739          {
14740             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14741             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
14742             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14743             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14744 
14745             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14746             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14747             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14748          }
14749          {
14750             using T1 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
14751             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
14752             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14753             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14754 
14755             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14756             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14757             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14758          }
14759          {
14760             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14761             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
14762             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
14763             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14764 
14765             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14766             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14767             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14768          }
14769          {
14770             using T1 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
14771             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
14772             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
14773             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14774 
14775             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14776             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14777             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14778          }
14779       }
14780    }
14781 
14782    // HermitianMatrix<DynamicMatrix>/... (Hermitian)
14783    {
14784       // .../StaticMatrix
14785       {
14786          {
14787             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14788             using T2 = StaticMatrix<int,3UL,3UL,rowMajor>;
14789             using RT = StaticMatrix<complex<int>,3UL,3UL,rowMajor>;
14790             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14791 
14792             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14793             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14794             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14795          }
14796          {
14797             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14798             using T2 = StaticMatrix<int,3UL,3UL,columnMajor>;
14799             using RT = StaticMatrix<complex<int>,3UL,3UL,rowMajor>;
14800             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14801 
14802             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14803             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14804             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14805          }
14806          {
14807             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14808             using T2 = StaticMatrix<int,3UL,3UL,rowMajor>;
14809             using RT = StaticMatrix<complex<int>,3UL,3UL,rowMajor>;
14810             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14811 
14812             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14813             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14814             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14815          }
14816          {
14817             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14818             using T2 = StaticMatrix<int,3UL,3UL,columnMajor>;
14819             using RT = StaticMatrix<complex<int>,3UL,3UL,columnMajor>;
14820             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14821 
14822             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14823             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14824             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14825          }
14826       }
14827 
14828       // .../HybridMatrix
14829       {
14830          {
14831             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14832             using T2 = HybridMatrix<int,8UL,6UL,rowMajor>;
14833             using RT = HybridMatrix<complex<int>,8UL,6UL,rowMajor>;
14834             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14835 
14836             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14837             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14838             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14839          }
14840          {
14841             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14842             using T2 = HybridMatrix<int,8UL,6UL,columnMajor>;
14843             using RT = HybridMatrix<complex<int>,8UL,6UL,rowMajor>;
14844             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14845 
14846             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14847             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14848             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14849          }
14850          {
14851             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14852             using T2 = HybridMatrix<int,8UL,6UL,rowMajor>;
14853             using RT = HybridMatrix<complex<int>,8UL,6UL,rowMajor>;
14854             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14855 
14856             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14857             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14858             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14859          }
14860          {
14861             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14862             using T2 = HybridMatrix<int,8UL,6UL,columnMajor>;
14863             using RT = HybridMatrix<complex<int>,8UL,6UL,columnMajor>;
14864             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14865 
14866             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14867             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14868             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14869          }
14870       }
14871 
14872       // .../DynamicMatrix
14873       {
14874          {
14875             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14876             using T2 = DynamicMatrix<int,rowMajor>;
14877             using RT = DynamicMatrix<complex<int>,rowMajor>;
14878             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14879 
14880             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14881             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14882             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14883          }
14884          {
14885             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14886             using T2 = DynamicMatrix<int,columnMajor>;
14887             using RT = DynamicMatrix<complex<int>,rowMajor>;
14888             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14889 
14890             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14891             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14892             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14893          }
14894          {
14895             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14896             using T2 = DynamicMatrix<int,rowMajor>;
14897             using RT = DynamicMatrix<complex<int>,rowMajor>;
14898             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14899 
14900             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14901             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14902             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14903          }
14904          {
14905             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14906             using T2 = DynamicMatrix<int,columnMajor>;
14907             using RT = DynamicMatrix<complex<int>,columnMajor>;
14908             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14909 
14910             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14911             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14912             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14913          }
14914       }
14915 
14916       // .../CustomMatrix
14917       {
14918          {
14919             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14920             using T2 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
14921             using RT = DynamicMatrix<complex<int>,rowMajor>;
14922             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14923 
14924             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14925             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14926             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14927          }
14928          {
14929             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14930             using T2 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
14931             using RT = DynamicMatrix<complex<int>,rowMajor>;
14932             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14933 
14934             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14935             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14936             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14937          }
14938          {
14939             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14940             using T2 = CustomMatrix<int,unaligned,unpadded,rowMajor>;
14941             using RT = DynamicMatrix<complex<int>,rowMajor>;
14942             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14943 
14944             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14945             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14946             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14947          }
14948          {
14949             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14950             using T2 = CustomMatrix<int,unaligned,unpadded,columnMajor>;
14951             using RT = DynamicMatrix<complex<int>,columnMajor>;
14952             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14953 
14954             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14955             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14956             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14957          }
14958       }
14959 
14960       // .../UniformMatrix
14961       {
14962          {
14963             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14964             using T2 = UniformMatrix<int,rowMajor>;
14965             using RT = DynamicMatrix<complex<int>,rowMajor>;
14966             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14967 
14968             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14969             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14970             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14971          }
14972          {
14973             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
14974             using T2 = UniformMatrix<int,columnMajor>;
14975             using RT = DynamicMatrix<complex<int>,rowMajor>;
14976             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14977 
14978             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14979             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14980             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14981          }
14982          {
14983             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14984             using T2 = UniformMatrix<int,rowMajor>;
14985             using RT = DynamicMatrix<complex<int>,rowMajor>;
14986             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14987 
14988             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14989             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
14990             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
14991          }
14992          {
14993             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
14994             using T2 = UniformMatrix<int,columnMajor>;
14995             using RT = DynamicMatrix<complex<int>,columnMajor>;
14996             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
14997 
14998             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
14999             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15000             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15001          }
15002       }
15003 
15004       // .../InitializerMatrix
15005       {
15006          {
15007             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15008             using T2 = InitializerMatrix<int>;
15009             using RT = DynamicMatrix<complex<int>,rowMajor>;
15010             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15011 
15012             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15013             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15014             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15015          }
15016          {
15017             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15018             using T2 = InitializerMatrix<int>;
15019             using RT = DynamicMatrix<complex<int>,rowMajor>;
15020             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15021 
15022             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15023             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15024             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15025          }
15026       }
15027 
15028       // .../CompressedMatrix
15029       {
15030          {
15031             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15032             using T2 = CompressedMatrix<int,rowMajor>;
15033             using RT = DynamicMatrix<complex<int>,rowMajor>;
15034             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15035 
15036             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15037             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15038             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15039          }
15040          {
15041             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15042             using T2 = CompressedMatrix<int,columnMajor>;
15043             using RT = DynamicMatrix<complex<int>,rowMajor>;
15044             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15045 
15046             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15047             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15048             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15049          }
15050          {
15051             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15052             using T2 = CompressedMatrix<int,rowMajor>;
15053             using RT = DynamicMatrix<complex<int>,columnMajor>;
15054             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15055 
15056             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15057             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15058             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15059          }
15060          {
15061             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15062             using T2 = CompressedMatrix<int,columnMajor>;
15063             using RT = DynamicMatrix<complex<int>,columnMajor>;
15064             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15065 
15066             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15067             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15068             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15069          }
15070       }
15071 
15072       // .../IdentityMatrix
15073       {
15074          {
15075             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15076             using T2 = IdentityMatrix<int,rowMajor>;
15077             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15078             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15079 
15080             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15081             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15082             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15083          }
15084          {
15085             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15086             using T2 = IdentityMatrix<int,columnMajor>;
15087             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15088             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15089 
15090             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15091             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15092             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15093          }
15094          {
15095             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15096             using T2 = IdentityMatrix<int,rowMajor>;
15097             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15098             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15099 
15100             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15101             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15102             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15103          }
15104          {
15105             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15106             using T2 = IdentityMatrix<int,columnMajor>;
15107             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15108             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15109 
15110             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15111             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15112             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15113          }
15114       }
15115 
15116       // .../ZeroMatrix
15117       {
15118          {
15119             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15120             using T2 = ZeroMatrix<int,rowMajor>;
15121             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15122             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15123 
15124             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15125             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15126             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15127          }
15128          {
15129             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15130             using T2 = ZeroMatrix<int,columnMajor>;
15131             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15132             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15133 
15134             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15135             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15136             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15137          }
15138          {
15139             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15140             using T2 = ZeroMatrix<int,rowMajor>;
15141             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15142             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15143 
15144             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15145             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15146             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15147          }
15148          {
15149             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15150             using T2 = ZeroMatrix<int,columnMajor>;
15151             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15152             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15153 
15154             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15155             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15156             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15157          }
15158       }
15159 
15160       // .../SymmetricMatrix<DynamicMatrix> (real)
15161       {
15162          {
15163             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15164             using T2 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
15165             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15166             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15167 
15168             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15169             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15170             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15171          }
15172          {
15173             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15174             using T2 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
15175             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15176             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15177 
15178             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15179             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15180             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15181          }
15182          {
15183             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15184             using T2 = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
15185             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15186             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15187 
15188             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15189             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15190             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15191          }
15192          {
15193             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15194             using T2 = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
15195             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15196             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15197 
15198             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15199             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15200             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15201          }
15202       }
15203 
15204       // .../SymmetricMatrix<DynamicMatrix> (complex)
15205       {
15206          {
15207             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15208             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15209             using RT = DynamicMatrix<complex<int>,rowMajor>;
15210             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15211 
15212             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15213             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15214             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15215          }
15216          {
15217             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15218             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15219             using RT = DynamicMatrix<complex<int>,rowMajor>;
15220             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15221 
15222             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15223             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15224             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15225          }
15226          {
15227             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15228             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15229             using RT = DynamicMatrix<complex<int>,columnMajor>;
15230             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15231 
15232             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15233             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15234             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15235          }
15236          {
15237             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15238             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15239             using RT = DynamicMatrix<complex<int>,columnMajor>;
15240             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15241 
15242             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15243             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15244             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15245          }
15246       }
15247 
15248       // .../SymmetricMatrix<UniformMatrix>
15249       {
15250          {
15251             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15252             using T2 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
15253             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15254             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15255 
15256             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15257             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15258             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15259          }
15260          {
15261             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15262             using T2 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
15263             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15264             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15265 
15266             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15267             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15268             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15269          }
15270          {
15271             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15272             using T2 = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
15273             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15274             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15275 
15276             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15277             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15278             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15279          }
15280          {
15281             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15282             using T2 = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
15283             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15284             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15285 
15286             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15287             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15288             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15289          }
15290       }
15291 
15292       // .../SymmetricMatrix<ZeroMatrix>
15293       {
15294          {
15295             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15296             using T2 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
15297             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15298             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15299 
15300             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15301             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15302             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15303          }
15304          {
15305             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15306             using T2 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
15307             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15308             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15309 
15310             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15311             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15312             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15313          }
15314          {
15315             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15316             using T2 = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
15317             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15318             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15319 
15320             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15321             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15322             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15323          }
15324          {
15325             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15326             using T2 = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
15327             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15328             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15329 
15330             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15331             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15332             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15333          }
15334       }
15335 
15336       // .../HermitianMatrix<DynamicMatrix> (symmetric)
15337       {
15338          {
15339             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15340             using T2 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
15341             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15342             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15343 
15344             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15345             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15346             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15347          }
15348          {
15349             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15350             using T2 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
15351             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15352             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15353 
15354             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15355             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15356             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15357          }
15358          {
15359             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15360             using T2 = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
15361             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15362             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15363 
15364             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15365             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15366             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15367          }
15368          {
15369             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15370             using T2 = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
15371             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15372             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15373 
15374             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15375             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15376             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15377          }
15378       }
15379 
15380       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
15381       {
15382          {
15383             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15384             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15385             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15386             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15387 
15388             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15389             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15390             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15391          }
15392          {
15393             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15394             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15395             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15396             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15397 
15398             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15399             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15400             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15401          }
15402          {
15403             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15404             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15405             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15406             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15407 
15408             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15409             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15410             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15411          }
15412          {
15413             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15414             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15415             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15416             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15417 
15418             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15419             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15420             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15421          }
15422       }
15423 
15424       // .../LowerMatrix<DynamicMatrix>
15425       {
15426          {
15427             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15428             using T2 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15429             using RT = DynamicMatrix<complex<int>,rowMajor>;
15430             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15431 
15432             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15433             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15434             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15435          }
15436          {
15437             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15438             using T2 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
15439             using RT = DynamicMatrix<complex<int>,rowMajor>;
15440             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15441 
15442             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15443             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15444             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15445          }
15446          {
15447             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15448             using T2 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15449             using RT = DynamicMatrix<complex<int>,rowMajor>;
15450             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15451 
15452             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15453             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15454             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15455          }
15456          {
15457             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15458             using T2 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
15459             using RT = DynamicMatrix<complex<int>,columnMajor>;
15460             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15461 
15462             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15463             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15464             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15465          }
15466       }
15467 
15468       // .../UniLowerMatrix<DynamicMatrix>
15469       {
15470          {
15471             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15472             using T2 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
15473             using RT = DynamicMatrix<complex<int>,rowMajor>;
15474             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15475 
15476             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15477             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15478             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15479          }
15480          {
15481             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15482             using T2 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
15483             using RT = DynamicMatrix<complex<int>,rowMajor>;
15484             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15485 
15486             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15487             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15488             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15489          }
15490          {
15491             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15492             using T2 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
15493             using RT = DynamicMatrix<complex<int>,rowMajor>;
15494             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15495 
15496             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15497             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15498             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15499          }
15500          {
15501             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15502             using T2 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
15503             using RT = DynamicMatrix<complex<int>,columnMajor>;
15504             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15505 
15506             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15507             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15508             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15509          }
15510       }
15511 
15512       // .../StrictlyLowerMatrix<DynamicMatrix>
15513       {
15514          {
15515             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15516             using T2 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
15517             using RT = DynamicMatrix<complex<int>,rowMajor>;
15518             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15519 
15520             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15521             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15522             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15523          }
15524          {
15525             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15526             using T2 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
15527             using RT = DynamicMatrix<complex<int>,rowMajor>;
15528             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15529 
15530             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15531             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15532             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15533          }
15534          {
15535             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15536             using T2 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
15537             using RT = DynamicMatrix<complex<int>,rowMajor>;
15538             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15539 
15540             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15541             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15542             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15543          }
15544          {
15545             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15546             using T2 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
15547             using RT = DynamicMatrix<complex<int>,columnMajor>;
15548             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15549 
15550             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15551             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15552             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15553          }
15554       }
15555 
15556       // .../UpperMatrix<DynamicMatrix>
15557       {
15558          {
15559             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15560             using T2 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
15561             using RT = DynamicMatrix<complex<int>,rowMajor>;
15562             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15563 
15564             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15565             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15566             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15567          }
15568          {
15569             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15570             using T2 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
15571             using RT = DynamicMatrix<complex<int>,rowMajor>;
15572             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15573 
15574             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15575             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15576             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15577          }
15578          {
15579             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15580             using T2 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
15581             using RT = DynamicMatrix<complex<int>,rowMajor>;
15582             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15583 
15584             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15585             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15586             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15587          }
15588          {
15589             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15590             using T2 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
15591             using RT = DynamicMatrix<complex<int>,columnMajor>;
15592             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15593 
15594             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15595             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15596             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15597          }
15598       }
15599 
15600       // .../UniUpperMatrix<DynamicMatrix>
15601       {
15602          {
15603             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15604             using T2 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
15605             using RT = DynamicMatrix<complex<int>,rowMajor>;
15606             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15607 
15608             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15609             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15610             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15611          }
15612          {
15613             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15614             using T2 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
15615             using RT = DynamicMatrix<complex<int>,rowMajor>;
15616             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15617 
15618             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15619             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15620             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15621          }
15622          {
15623             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15624             using T2 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
15625             using RT = DynamicMatrix<complex<int>,rowMajor>;
15626             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15627 
15628             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15629             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15630             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15631          }
15632          {
15633             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15634             using T2 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
15635             using RT = DynamicMatrix<complex<int>,columnMajor>;
15636             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15637 
15638             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15639             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15640             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15641          }
15642       }
15643 
15644       // .../StrictlyUpperMatrix<DynamicMatrix>
15645       {
15646          {
15647             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15648             using T2 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
15649             using RT = DynamicMatrix<complex<int>,rowMajor>;
15650             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15651 
15652             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15653             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15654             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15655          }
15656          {
15657             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15658             using T2 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
15659             using RT = DynamicMatrix<complex<int>,rowMajor>;
15660             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15661 
15662             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15663             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15664             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15665          }
15666          {
15667             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15668             using T2 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
15669             using RT = DynamicMatrix<complex<int>,rowMajor>;
15670             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15671 
15672             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15673             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15674             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15675          }
15676          {
15677             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15678             using T2 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
15679             using RT = DynamicMatrix<complex<int>,columnMajor>;
15680             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15681 
15682             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15683             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15684             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15685          }
15686       }
15687 
15688       // .../DiagonalMatrix<DynamicMatrix>
15689       {
15690          {
15691             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15692             using T2 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
15693             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15694             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15695 
15696             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15697             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15698             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15699          }
15700          {
15701             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15702             using T2 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
15703             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
15704             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15705 
15706             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15707             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15708             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15709          }
15710          {
15711             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15712             using T2 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
15713             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15714             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15715 
15716             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15717             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15718             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15719          }
15720          {
15721             using T1 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15722             using T2 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
15723             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
15724             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15725 
15726             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15727             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15728             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15729          }
15730       }
15731    }
15732 
15733    // LowerMatrix<DynamicMatrix>/...
15734    {
15735       // .../StaticMatrix
15736       {
15737          {
15738             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15739             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
15740             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
15741             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15742 
15743             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15744             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15745             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15746          }
15747          {
15748             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15749             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
15750             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
15751             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15752 
15753             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15754             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15755             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15756          }
15757          {
15758             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
15759             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
15760             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
15761             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15762 
15763             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15764             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15765             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15766          }
15767          {
15768             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
15769             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
15770             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
15771             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15772 
15773             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15774             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15775             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15776          }
15777       }
15778 
15779       // .../HybridMatrix
15780       {
15781          {
15782             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15783             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
15784             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
15785             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15786 
15787             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15788             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15789             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15790          }
15791          {
15792             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15793             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
15794             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
15795             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15796 
15797             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15798             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15799             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15800          }
15801          {
15802             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
15803             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
15804             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
15805             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15806 
15807             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15808             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15809             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15810          }
15811          {
15812             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
15813             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
15814             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
15815             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15816 
15817             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15818             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15819             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15820          }
15821       }
15822 
15823       // .../DynamicMatrix
15824       {
15825          {
15826             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15827             using T2 = DynamicMatrix<double,rowMajor>;
15828             using RT = DynamicMatrix<double,rowMajor>;
15829             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15830 
15831             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15832             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15833             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15834          }
15835          {
15836             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15837             using T2 = DynamicMatrix<double,columnMajor>;
15838             using RT = DynamicMatrix<double,rowMajor>;
15839             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15840 
15841             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15842             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15843             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15844          }
15845          {
15846             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
15847             using T2 = DynamicMatrix<double,rowMajor>;
15848             using RT = DynamicMatrix<double,rowMajor>;
15849             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15850 
15851             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15852             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15853             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15854          }
15855          {
15856             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
15857             using T2 = DynamicMatrix<double,columnMajor>;
15858             using RT = DynamicMatrix<double,columnMajor>;
15859             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15860 
15861             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15862             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15863             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15864          }
15865       }
15866 
15867       // .../CustomMatrix
15868       {
15869          {
15870             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15871             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
15872             using RT = DynamicMatrix<double,rowMajor>;
15873             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15874 
15875             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15876             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15877             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15878          }
15879          {
15880             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15881             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
15882             using RT = DynamicMatrix<double,rowMajor>;
15883             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15884 
15885             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15886             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15887             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15888          }
15889          {
15890             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
15891             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
15892             using RT = DynamicMatrix<double,rowMajor>;
15893             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15894 
15895             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15896             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15897             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15898          }
15899          {
15900             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
15901             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
15902             using RT = DynamicMatrix<double,columnMajor>;
15903             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15904 
15905             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15906             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15907             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15908          }
15909       }
15910 
15911       // .../UniformMatrix
15912       {
15913          {
15914             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15915             using T2 = UniformMatrix<double,rowMajor>;
15916             using RT = DynamicMatrix<double,rowMajor>;
15917             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15918 
15919             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15920             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15921             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15922          }
15923          {
15924             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15925             using T2 = UniformMatrix<double,columnMajor>;
15926             using RT = DynamicMatrix<double,rowMajor>;
15927             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15928 
15929             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15930             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15931             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15932          }
15933          {
15934             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
15935             using T2 = UniformMatrix<double,rowMajor>;
15936             using RT = DynamicMatrix<double,rowMajor>;
15937             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15938 
15939             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15940             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15941             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15942          }
15943          {
15944             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
15945             using T2 = UniformMatrix<double,columnMajor>;
15946             using RT = DynamicMatrix<double,columnMajor>;
15947             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15948 
15949             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15950             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15951             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15952          }
15953       }
15954 
15955       // .../InitializerMatrix
15956       {
15957          {
15958             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15959             using T2 = InitializerMatrix<double>;
15960             using RT = DynamicMatrix<double,rowMajor>;
15961             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15962 
15963             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15964             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15965             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15966          }
15967          {
15968             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15969             using T2 = InitializerMatrix<double>;
15970             using RT = DynamicMatrix<double,rowMajor>;
15971             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15972 
15973             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15974             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15975             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15976          }
15977       }
15978 
15979       // .../CompressedMatrix
15980       {
15981          {
15982             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15983             using T2 = CompressedMatrix<double,rowMajor>;
15984             using RT = DynamicMatrix<double,rowMajor>;
15985             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15986 
15987             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15988             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15989             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
15990          }
15991          {
15992             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
15993             using T2 = CompressedMatrix<double,columnMajor>;
15994             using RT = DynamicMatrix<double,rowMajor>;
15995             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
15996 
15997             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
15998             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
15999             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16000          }
16001          {
16002             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16003             using T2 = CompressedMatrix<double,rowMajor>;
16004             using RT = DynamicMatrix<double,columnMajor>;
16005             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16006 
16007             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16008             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16009             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16010          }
16011          {
16012             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16013             using T2 = CompressedMatrix<double,columnMajor>;
16014             using RT = DynamicMatrix<double,columnMajor>;
16015             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16016 
16017             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16018             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16019             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16020          }
16021       }
16022 
16023       // .../IdentityMatrix
16024       {
16025          {
16026             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16027             using T2 = IdentityMatrix<double,rowMajor>;
16028             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16029             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16030 
16031             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16032             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16033             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16034          }
16035          {
16036             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16037             using T2 = IdentityMatrix<double,columnMajor>;
16038             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16039             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16040 
16041             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16042             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16043             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16044          }
16045          {
16046             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16047             using T2 = IdentityMatrix<double,rowMajor>;
16048             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
16049             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16050 
16051             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16052             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16053             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16054          }
16055          {
16056             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16057             using T2 = IdentityMatrix<double,columnMajor>;
16058             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
16059             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16060 
16061             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16062             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16063             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16064          }
16065       }
16066 
16067       // .../ZeroMatrix
16068       {
16069          {
16070             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16071             using T2 = ZeroMatrix<double,rowMajor>;
16072             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16073             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16074 
16075             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16076             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16077             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16078          }
16079          {
16080             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16081             using T2 = ZeroMatrix<double,columnMajor>;
16082             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16083             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16084 
16085             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16086             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16087             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16088          }
16089          {
16090             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16091             using T2 = ZeroMatrix<double,rowMajor>;
16092             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
16093             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16094 
16095             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16096             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16097             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16098          }
16099          {
16100             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16101             using T2 = ZeroMatrix<double,columnMajor>;
16102             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
16103             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16104 
16105             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16106             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16107             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16108          }
16109       }
16110 
16111       // .../SymmetricMatrix<DynamicMatrix> (real)
16112       {
16113          {
16114             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16115             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
16116             using RT = DynamicMatrix<double,rowMajor>;
16117             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16118 
16119             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16120             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16121             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16122          }
16123          {
16124             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16125             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
16126             using RT = DynamicMatrix<double,rowMajor>;
16127             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16128 
16129             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16130             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16131             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16132          }
16133          {
16134             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16135             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
16136             using RT = DynamicMatrix<double,columnMajor>;
16137             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16138 
16139             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16140             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16141             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16142          }
16143          {
16144             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16145             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
16146             using RT = DynamicMatrix<double,columnMajor>;
16147             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16148 
16149             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16150             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16151             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16152          }
16153       }
16154 
16155       // .../SymmetricMatrix<DynamicMatrix> (complex)
16156       {
16157          {
16158             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16159             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
16160             using RT = DynamicMatrix<complex<int>,rowMajor>;
16161             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16162 
16163             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16164             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16165             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16166          }
16167          {
16168             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16169             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
16170             using RT = DynamicMatrix<complex<int>,rowMajor>;
16171             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16172 
16173             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16174             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16175             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16176          }
16177          {
16178             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16179             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
16180             using RT = DynamicMatrix<complex<int>,columnMajor>;
16181             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16182 
16183             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16184             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16185             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16186          }
16187          {
16188             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16189             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
16190             using RT = DynamicMatrix<complex<int>,columnMajor>;
16191             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16192 
16193             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16194             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16195             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16196          }
16197       }
16198 
16199       // .../SymmetricMatrix<UniformMatrix>
16200       {
16201          {
16202             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16203             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
16204             using RT = DynamicMatrix<double,rowMajor>;
16205             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16206 
16207             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16208             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16209             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16210          }
16211          {
16212             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16213             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
16214             using RT = DynamicMatrix<double,rowMajor>;
16215             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16216 
16217             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16218             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16219             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16220          }
16221          {
16222             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16223             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
16224             using RT = DynamicMatrix<double,columnMajor>;
16225             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16226 
16227             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16228             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16229             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16230          }
16231          {
16232             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16233             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
16234             using RT = DynamicMatrix<double,columnMajor>;
16235             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16236 
16237             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16238             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16239             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16240          }
16241       }
16242 
16243       // .../SymmetricMatrix<ZeroMatrix>
16244       {
16245          {
16246             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16247             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
16248             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16249             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16250 
16251             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16252             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16253             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16254          }
16255          {
16256             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16257             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
16258             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16259             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16260 
16261             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16262             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16263             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16264          }
16265          {
16266             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16267             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
16268             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
16269             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16270 
16271             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16272             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16273             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16274          }
16275          {
16276             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16277             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
16278             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
16279             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16280 
16281             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16282             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16283             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16284          }
16285       }
16286 
16287       // .../HermitianMatrix<DynamicMatrix> (symmetric)
16288       {
16289          {
16290             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16291             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
16292             using RT = DynamicMatrix<double,rowMajor>;
16293             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16294 
16295             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16296             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16297             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16298          }
16299          {
16300             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16301             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
16302             using RT = DynamicMatrix<double,rowMajor>;
16303             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16304 
16305             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16306             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16307             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16308          }
16309          {
16310             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16311             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
16312             using RT = DynamicMatrix<double,columnMajor>;
16313             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16314 
16315             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16316             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16317             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16318          }
16319          {
16320             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16321             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
16322             using RT = DynamicMatrix<double,columnMajor>;
16323             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16324 
16325             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16326             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16327             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16328          }
16329       }
16330 
16331       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
16332       {
16333          {
16334             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16335             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
16336             using RT = DynamicMatrix<complex<int>,rowMajor>;
16337             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16338 
16339             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16340             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16341             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16342          }
16343          {
16344             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16345             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
16346             using RT = DynamicMatrix<complex<int>,rowMajor>;
16347             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16348 
16349             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16350             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16351             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16352          }
16353          {
16354             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16355             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
16356             using RT = DynamicMatrix<complex<int>,rowMajor>;
16357             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16358 
16359             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16360             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16361             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16362          }
16363          {
16364             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16365             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
16366             using RT = DynamicMatrix<complex<int>,columnMajor>;
16367             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16368 
16369             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16370             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16371             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16372          }
16373       }
16374 
16375       // .../LowerMatrix<DynamicMatrix>
16376       {
16377          {
16378             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16379             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16380             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16381             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16382 
16383             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16384             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16385             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16386          }
16387          {
16388             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16389             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
16390             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16391             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16392 
16393             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16394             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16395             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16396          }
16397          {
16398             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16399             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16400             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16401             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16402 
16403             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16404             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16405             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16406          }
16407          {
16408             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16409             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
16410             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
16411             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16412 
16413             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16414             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16415             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16416          }
16417       }
16418 
16419       // .../UniLowerMatrix<DynamicMatrix>
16420       {
16421          {
16422             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16423             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
16424             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16425             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16426 
16427             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16428             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16429             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16430          }
16431          {
16432             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16433             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
16434             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16435             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16436 
16437             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16438             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16439             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16440          }
16441          {
16442             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16443             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
16444             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16445             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16446 
16447             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16448             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16449             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16450          }
16451          {
16452             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16453             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
16454             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
16455             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16456 
16457             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16458             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16459             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16460          }
16461       }
16462 
16463       // .../StrictlyLowerMatrix<DynamicMatrix>
16464       {
16465          {
16466             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16467             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
16468             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16469             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16470 
16471             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16472             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16473             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16474          }
16475          {
16476             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16477             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
16478             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16479             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16480 
16481             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16482             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16483             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16484          }
16485          {
16486             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16487             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
16488             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16489             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16490 
16491             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16492             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16493             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16494          }
16495          {
16496             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16497             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
16498             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
16499             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16500 
16501             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16502             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16503             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16504          }
16505       }
16506 
16507       // .../UpperMatrix<DynamicMatrix>
16508       {
16509          {
16510             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16511             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
16512             using RT = DynamicMatrix<double,rowMajor>;
16513             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16514 
16515             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16516             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16517             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16518          }
16519          {
16520             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16521             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
16522             using RT = DynamicMatrix<double,rowMajor>;
16523             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16524 
16525             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16526             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16527             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16528          }
16529          {
16530             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16531             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
16532             using RT = DynamicMatrix<double,rowMajor>;
16533             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16534 
16535             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16536             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16537             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16538          }
16539          {
16540             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16541             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
16542             using RT = DynamicMatrix<double,columnMajor>;
16543             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16544 
16545             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16546             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16547             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16548          }
16549       }
16550 
16551       // .../UniUpperMatrix<DynamicMatrix>
16552       {
16553          {
16554             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16555             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
16556             using RT = DynamicMatrix<double,rowMajor>;
16557             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16558 
16559             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16560             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16561             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16562          }
16563          {
16564             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16565             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
16566             using RT = DynamicMatrix<double,rowMajor>;
16567             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16568 
16569             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16570             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16571             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16572          }
16573          {
16574             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16575             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
16576             using RT = DynamicMatrix<double,rowMajor>;
16577             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16578 
16579             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16580             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16581             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16582          }
16583          {
16584             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16585             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
16586             using RT = DynamicMatrix<double,columnMajor>;
16587             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16588 
16589             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16590             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16591             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16592          }
16593       }
16594 
16595       // .../StrictlyUpperMatrix<DynamicMatrix>
16596       {
16597          {
16598             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16599             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
16600             using RT = DynamicMatrix<double,rowMajor>;
16601             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16602 
16603             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16604             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16605             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16606          }
16607          {
16608             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16609             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
16610             using RT = DynamicMatrix<double,rowMajor>;
16611             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16612 
16613             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16614             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16615             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16616          }
16617          {
16618             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16619             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
16620             using RT = DynamicMatrix<double,rowMajor>;
16621             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16622 
16623             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16624             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16625             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16626          }
16627          {
16628             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16629             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
16630             using RT = DynamicMatrix<double,columnMajor>;
16631             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16632 
16633             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16634             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16635             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16636          }
16637       }
16638 
16639       // .../DiagonalMatrix<DynamicMatrix>
16640       {
16641          {
16642             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16643             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
16644             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16645             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16646 
16647             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16648             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16649             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16650          }
16651          {
16652             using T1 = LowerMatrix< DynamicMatrix<int,rowMajor> >;
16653             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
16654             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16655             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16656 
16657             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16658             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16659             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16660          }
16661          {
16662             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16663             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
16664             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
16665             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16666 
16667             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16668             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16669             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16670          }
16671          {
16672             using T1 = LowerMatrix< DynamicMatrix<int,columnMajor> >;
16673             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
16674             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
16675             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16676 
16677             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16678             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16679             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16680          }
16681       }
16682    }
16683 
16684    // UniLowerMatrix<DynamicMatrix>/...
16685    {
16686       // .../StaticMatrix
16687       {
16688          {
16689             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16690             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
16691             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
16692             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16693 
16694             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16695             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16696             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16697          }
16698          {
16699             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16700             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
16701             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
16702             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16703 
16704             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16705             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16706             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16707          }
16708          {
16709             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
16710             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
16711             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
16712             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16713 
16714             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16715             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16716             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16717          }
16718          {
16719             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
16720             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
16721             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
16722             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16723 
16724             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16725             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16726             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16727          }
16728       }
16729 
16730       // .../HybridMatrix
16731       {
16732          {
16733             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16734             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
16735             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
16736             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16737 
16738             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16739             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16740             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16741          }
16742          {
16743             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16744             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
16745             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
16746             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16747 
16748             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16749             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16750             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16751          }
16752          {
16753             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
16754             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
16755             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
16756             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16757 
16758             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16759             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16760             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16761          }
16762          {
16763             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
16764             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
16765             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
16766             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16767 
16768             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16769             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16770             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16771          }
16772       }
16773 
16774       // .../DynamicMatrix
16775       {
16776          {
16777             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16778             using T2 = DynamicMatrix<double,rowMajor>;
16779             using RT = DynamicMatrix<double,rowMajor>;
16780             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16781 
16782             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16783             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16784             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16785          }
16786          {
16787             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16788             using T2 = DynamicMatrix<double,columnMajor>;
16789             using RT = DynamicMatrix<double,rowMajor>;
16790             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16791 
16792             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16793             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16794             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16795          }
16796          {
16797             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
16798             using T2 = DynamicMatrix<double,rowMajor>;
16799             using RT = DynamicMatrix<double,rowMajor>;
16800             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16801 
16802             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16803             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16804             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16805          }
16806          {
16807             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
16808             using T2 = DynamicMatrix<double,columnMajor>;
16809             using RT = DynamicMatrix<double,columnMajor>;
16810             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16811 
16812             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16813             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16814             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16815          }
16816       }
16817 
16818       // .../CustomMatrix
16819       {
16820          {
16821             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16822             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
16823             using RT = DynamicMatrix<double,rowMajor>;
16824             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16825 
16826             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16827             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16828             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16829          }
16830          {
16831             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16832             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
16833             using RT = DynamicMatrix<double,rowMajor>;
16834             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16835 
16836             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16837             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16838             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16839          }
16840          {
16841             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
16842             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
16843             using RT = DynamicMatrix<double,rowMajor>;
16844             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16845 
16846             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16847             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16848             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16849          }
16850          {
16851             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
16852             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
16853             using RT = DynamicMatrix<double,columnMajor>;
16854             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16855 
16856             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16857             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16858             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16859          }
16860       }
16861 
16862       // .../UniformMatrix
16863       {
16864          {
16865             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16866             using T2 = UniformMatrix<double,rowMajor>;
16867             using RT = DynamicMatrix<double,rowMajor>;
16868             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16869 
16870             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16871             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16872             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16873          }
16874          {
16875             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16876             using T2 = UniformMatrix<double,columnMajor>;
16877             using RT = DynamicMatrix<double,rowMajor>;
16878             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16879 
16880             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16881             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16882             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16883          }
16884          {
16885             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
16886             using T2 = UniformMatrix<double,rowMajor>;
16887             using RT = DynamicMatrix<double,rowMajor>;
16888             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16889 
16890             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16891             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16892             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16893          }
16894          {
16895             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
16896             using T2 = UniformMatrix<double,columnMajor>;
16897             using RT = DynamicMatrix<double,columnMajor>;
16898             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16899 
16900             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16901             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16902             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16903          }
16904       }
16905 
16906       // .../InitializerMatrix
16907       {
16908          {
16909             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16910             using T2 = InitializerMatrix<double>;
16911             using RT = DynamicMatrix<double,rowMajor>;
16912             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16913 
16914             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16915             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16916             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16917          }
16918          {
16919             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
16920             using T2 = InitializerMatrix<double>;
16921             using RT = DynamicMatrix<double,rowMajor>;
16922             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16923 
16924             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16925             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16926             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16927          }
16928       }
16929 
16930       // .../CompressedMatrix
16931       {
16932          {
16933             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16934             using T2 = CompressedMatrix<double,rowMajor>;
16935             using RT = DynamicMatrix<double,rowMajor>;
16936             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16937 
16938             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16939             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16940             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16941          }
16942          {
16943             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16944             using T2 = CompressedMatrix<double,columnMajor>;
16945             using RT = DynamicMatrix<double,rowMajor>;
16946             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16947 
16948             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16949             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16950             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16951          }
16952          {
16953             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
16954             using T2 = CompressedMatrix<double,rowMajor>;
16955             using RT = DynamicMatrix<double,columnMajor>;
16956             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16957 
16958             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16959             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16960             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16961          }
16962          {
16963             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
16964             using T2 = CompressedMatrix<double,columnMajor>;
16965             using RT = DynamicMatrix<double,columnMajor>;
16966             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16967 
16968             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16969             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16970             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16971          }
16972       }
16973 
16974       // .../IdentityMatrix
16975       {
16976          {
16977             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16978             using T2 = IdentityMatrix<double,rowMajor>;
16979             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16980             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16981 
16982             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16983             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16984             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16985          }
16986          {
16987             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
16988             using T2 = IdentityMatrix<double,columnMajor>;
16989             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
16990             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
16991 
16992             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
16993             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
16994             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
16995          }
16996          {
16997             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
16998             using T2 = IdentityMatrix<double,rowMajor>;
16999             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
17000             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17001 
17002             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17003             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17004             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17005          }
17006          {
17007             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17008             using T2 = IdentityMatrix<double,columnMajor>;
17009             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
17010             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17011 
17012             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17013             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17014             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17015          }
17016       }
17017 
17018       // .../ZeroMatrix
17019       {
17020          {
17021             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17022             using T2 = ZeroMatrix<double,rowMajor>;
17023             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
17024             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17025 
17026             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17027             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17028             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17029          }
17030          {
17031             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17032             using T2 = ZeroMatrix<double,columnMajor>;
17033             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
17034             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17035 
17036             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17037             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17038             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17039          }
17040          {
17041             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17042             using T2 = ZeroMatrix<double,rowMajor>;
17043             using RT = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
17044             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17045 
17046             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17047             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17048             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17049          }
17050          {
17051             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17052             using T2 = ZeroMatrix<double,columnMajor>;
17053             using RT = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
17054             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17055 
17056             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17057             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17058             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17059          }
17060       }
17061 
17062       // .../SymmetricMatrix<DynamicMatrix> (real)
17063       {
17064          {
17065             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17066             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
17067             using RT = DynamicMatrix<double,rowMajor>;
17068             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17069 
17070             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17071             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17072             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17073          }
17074          {
17075             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17076             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
17077             using RT = DynamicMatrix<double,rowMajor>;
17078             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17079 
17080             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17081             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17082             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17083          }
17084          {
17085             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17086             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
17087             using RT = DynamicMatrix<double,columnMajor>;
17088             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17089 
17090             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17091             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17092             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17093          }
17094          {
17095             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17096             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
17097             using RT = DynamicMatrix<double,columnMajor>;
17098             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17099 
17100             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17101             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17102             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17103          }
17104       }
17105 
17106       // .../SymmetricMatrix<DynamicMatrix> (complex)
17107       {
17108          {
17109             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17110             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
17111             using RT = DynamicMatrix<complex<int>,rowMajor>;
17112             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17113 
17114             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17115             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17116             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17117          }
17118          {
17119             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17120             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
17121             using RT = DynamicMatrix<complex<int>,rowMajor>;
17122             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17123 
17124             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17125             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17126             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17127          }
17128          {
17129             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17130             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
17131             using RT = DynamicMatrix<complex<int>,columnMajor>;
17132             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17133 
17134             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17135             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17136             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17137          }
17138          {
17139             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17140             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
17141             using RT = DynamicMatrix<complex<int>,columnMajor>;
17142             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17143 
17144             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17145             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17146             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17147          }
17148       }
17149 
17150       // .../SymmetricMatrix<UniformMatrix>
17151       {
17152          {
17153             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17154             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
17155             using RT = DynamicMatrix<double,rowMajor>;
17156             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17157 
17158             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17159             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17160             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17161          }
17162          {
17163             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17164             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
17165             using RT = DynamicMatrix<double,rowMajor>;
17166             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17167 
17168             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17169             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17170             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17171          }
17172          {
17173             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17174             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
17175             using RT = DynamicMatrix<double,columnMajor>;
17176             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17177 
17178             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17179             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17180             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17181          }
17182          {
17183             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17184             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
17185             using RT = DynamicMatrix<double,columnMajor>;
17186             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17187 
17188             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17189             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17190             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17191          }
17192       }
17193 
17194       // .../SymmetricMatrix<ZeroMatrix>
17195       {
17196          {
17197             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17198             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
17199             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
17200             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17201 
17202             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17203             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17204             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17205          }
17206          {
17207             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17208             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
17209             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
17210             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17211 
17212             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17213             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17214             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17215          }
17216          {
17217             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17218             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
17219             using RT = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
17220             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17221 
17222             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17223             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17224             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17225          }
17226          {
17227             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17228             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
17229             using RT = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
17230             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17231 
17232             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17233             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17234             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17235          }
17236       }
17237 
17238       // .../HermitianMatrix<DynamicMatrix> (symmetric)
17239       {
17240          {
17241             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17242             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
17243             using RT = DynamicMatrix<double,rowMajor>;
17244             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17245 
17246             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17247             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17248             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17249          }
17250          {
17251             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17252             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
17253             using RT = DynamicMatrix<double,rowMajor>;
17254             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17255 
17256             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17257             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17258             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17259          }
17260          {
17261             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17262             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
17263             using RT = DynamicMatrix<double,columnMajor>;
17264             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17265 
17266             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17267             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17268             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17269          }
17270          {
17271             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17272             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
17273             using RT = DynamicMatrix<double,columnMajor>;
17274             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17275 
17276             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17277             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17278             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17279          }
17280       }
17281 
17282       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
17283       {
17284          {
17285             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17286             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
17287             using RT = DynamicMatrix<complex<int>,rowMajor>;
17288             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17289 
17290             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17291             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17292             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17293          }
17294          {
17295             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17296             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
17297             using RT = DynamicMatrix<complex<int>,rowMajor>;
17298             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17299 
17300             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17301             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17302             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17303          }
17304          {
17305             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17306             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
17307             using RT = DynamicMatrix<complex<int>,rowMajor>;
17308             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17309 
17310             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17311             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17312             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17313          }
17314          {
17315             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17316             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
17317             using RT = DynamicMatrix<complex<int>,columnMajor>;
17318             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17319 
17320             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17321             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17322             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17323          }
17324       }
17325 
17326       // .../LowerMatrix<DynamicMatrix>
17327       {
17328          {
17329             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17330             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
17331             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
17332             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17333 
17334             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17335             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17336             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17337          }
17338          {
17339             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17340             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
17341             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
17342             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17343 
17344             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17345             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17346             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17347          }
17348          {
17349             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17350             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
17351             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
17352             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17353 
17354             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17355             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17356             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17357          }
17358          {
17359             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17360             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
17361             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
17362             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17363 
17364             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17365             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17366             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17367          }
17368       }
17369 
17370       // .../UniLowerMatrix<DynamicMatrix>
17371       {
17372          {
17373             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17374             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
17375             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
17376             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17377 
17378             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17379             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17380             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17381          }
17382          {
17383             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17384             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
17385             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
17386             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17387 
17388             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17389             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17390             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17391          }
17392          {
17393             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17394             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
17395             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
17396             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17397 
17398             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17399             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17400             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17401          }
17402          {
17403             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17404             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
17405             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
17406             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17407 
17408             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17409             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17410             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17411          }
17412       }
17413 
17414       // .../StrictlyLowerMatrix<DynamicMatrix>
17415       {
17416          {
17417             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17418             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
17419             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
17420             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17421 
17422             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17423             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17424             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17425          }
17426          {
17427             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17428             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
17429             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
17430             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17431 
17432             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17433             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17434             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17435          }
17436          {
17437             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17438             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
17439             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
17440             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17441 
17442             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17443             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17444             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17445          }
17446          {
17447             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17448             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
17449             using RT = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
17450             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17451 
17452             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17453             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17454             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17455          }
17456       }
17457 
17458       // .../UpperMatrix<DynamicMatrix>
17459       {
17460          {
17461             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17462             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
17463             using RT = DynamicMatrix<double,rowMajor>;
17464             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17465 
17466             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17467             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17468             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17469          }
17470          {
17471             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17472             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
17473             using RT = DynamicMatrix<double,rowMajor>;
17474             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17475 
17476             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17477             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17478             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17479          }
17480          {
17481             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17482             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
17483             using RT = DynamicMatrix<double,rowMajor>;
17484             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17485 
17486             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17487             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17488             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17489          }
17490          {
17491             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17492             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
17493             using RT = DynamicMatrix<double,columnMajor>;
17494             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17495 
17496             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17497             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17498             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17499          }
17500       }
17501 
17502       // .../UniUpperMatrix<DynamicMatrix>
17503       {
17504          {
17505             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17506             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
17507             using RT = DynamicMatrix<double,rowMajor>;
17508             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17509 
17510             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17511             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17512             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17513          }
17514          {
17515             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17516             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
17517             using RT = DynamicMatrix<double,rowMajor>;
17518             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17519 
17520             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17521             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17522             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17523          }
17524          {
17525             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17526             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
17527             using RT = DynamicMatrix<double,rowMajor>;
17528             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17529 
17530             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17531             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17532             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17533          }
17534          {
17535             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17536             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
17537             using RT = DynamicMatrix<double,columnMajor>;
17538             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17539 
17540             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17541             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17542             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17543          }
17544       }
17545 
17546       // .../StrictlyUpperMatrix<DynamicMatrix>
17547       {
17548          {
17549             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17550             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
17551             using RT = DynamicMatrix<double,rowMajor>;
17552             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17553 
17554             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17555             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17556             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17557          }
17558          {
17559             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17560             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
17561             using RT = DynamicMatrix<double,rowMajor>;
17562             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17563 
17564             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17565             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17566             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17567          }
17568          {
17569             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17570             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
17571             using RT = DynamicMatrix<double,rowMajor>;
17572             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17573 
17574             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17575             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17576             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17577          }
17578          {
17579             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17580             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
17581             using RT = DynamicMatrix<double,columnMajor>;
17582             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17583 
17584             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17585             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17586             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17587          }
17588       }
17589 
17590       // .../DiagonalMatrix<DynamicMatrix>
17591       {
17592          {
17593             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17594             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
17595             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
17596             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17597 
17598             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17599             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17600             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17601          }
17602          {
17603             using T1 = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
17604             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
17605             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
17606             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17607 
17608             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17609             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17610             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17611          }
17612          {
17613             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17614             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
17615             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
17616             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17617 
17618             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17619             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17620             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17621          }
17622          {
17623             using T1 = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
17624             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
17625             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
17626             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17627 
17628             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17629             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17630             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17631          }
17632       }
17633    }
17634 
17635    // StrictlyLowerMatrix<DynamicMatrix>/...
17636    {
17637       // .../StaticMatrix
17638       {
17639          {
17640             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17641             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
17642             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
17643             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17644 
17645             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17646             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17647             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17648          }
17649          {
17650             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17651             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
17652             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
17653             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17654 
17655             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17656             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17657             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17658          }
17659          {
17660             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17661             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
17662             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
17663             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17664 
17665             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17666             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17667             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17668          }
17669          {
17670             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17671             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
17672             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
17673             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17674 
17675             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17676             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17677             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17678          }
17679       }
17680 
17681       // .../HybridMatrix
17682       {
17683          {
17684             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17685             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
17686             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
17687             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17688 
17689             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17690             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17691             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17692          }
17693          {
17694             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17695             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
17696             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
17697             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17698 
17699             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17700             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17701             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17702          }
17703          {
17704             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17705             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
17706             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
17707             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17708 
17709             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17710             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17711             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17712          }
17713          {
17714             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17715             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
17716             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
17717             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17718 
17719             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17720             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17721             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17722          }
17723       }
17724 
17725       // .../DynamicMatrix
17726       {
17727          {
17728             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17729             using T2 = DynamicMatrix<double,rowMajor>;
17730             using RT = DynamicMatrix<double,rowMajor>;
17731             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17732 
17733             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17734             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17735             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17736          }
17737          {
17738             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17739             using T2 = DynamicMatrix<double,columnMajor>;
17740             using RT = DynamicMatrix<double,rowMajor>;
17741             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17742 
17743             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17744             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17745             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17746          }
17747          {
17748             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17749             using T2 = DynamicMatrix<double,rowMajor>;
17750             using RT = DynamicMatrix<double,rowMajor>;
17751             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17752 
17753             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17754             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17755             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17756          }
17757          {
17758             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17759             using T2 = DynamicMatrix<double,columnMajor>;
17760             using RT = DynamicMatrix<double,columnMajor>;
17761             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17762 
17763             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17764             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17765             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17766          }
17767       }
17768 
17769       // .../CustomMatrix
17770       {
17771          {
17772             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17773             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
17774             using RT = DynamicMatrix<double,rowMajor>;
17775             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17776 
17777             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17778             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17779             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17780          }
17781          {
17782             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17783             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
17784             using RT = DynamicMatrix<double,rowMajor>;
17785             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17786 
17787             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17788             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17789             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17790          }
17791          {
17792             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17793             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
17794             using RT = DynamicMatrix<double,rowMajor>;
17795             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17796 
17797             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17798             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17799             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17800          }
17801          {
17802             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17803             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
17804             using RT = DynamicMatrix<double,columnMajor>;
17805             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17806 
17807             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17808             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17809             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17810          }
17811       }
17812 
17813       // .../UniformMatrix
17814       {
17815          {
17816             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17817             using T2 = UniformMatrix<double,rowMajor>;
17818             using RT = DynamicMatrix<double,rowMajor>;
17819             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17820 
17821             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17822             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17823             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17824          }
17825          {
17826             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17827             using T2 = UniformMatrix<double,columnMajor>;
17828             using RT = DynamicMatrix<double,rowMajor>;
17829             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17830 
17831             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17832             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17833             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17834          }
17835          {
17836             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17837             using T2 = UniformMatrix<double,rowMajor>;
17838             using RT = DynamicMatrix<double,rowMajor>;
17839             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17840 
17841             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17842             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17843             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17844          }
17845          {
17846             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17847             using T2 = UniformMatrix<double,columnMajor>;
17848             using RT = DynamicMatrix<double,columnMajor>;
17849             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17850 
17851             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17852             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17853             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17854          }
17855       }
17856 
17857       // .../InitializerMatrix
17858       {
17859          {
17860             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17861             using T2 = InitializerMatrix<double>;
17862             using RT = DynamicMatrix<double,rowMajor>;
17863             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17864 
17865             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17866             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17867             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17868          }
17869          {
17870             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17871             using T2 = InitializerMatrix<double>;
17872             using RT = DynamicMatrix<double,rowMajor>;
17873             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17874 
17875             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17876             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17877             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17878          }
17879       }
17880 
17881       // .../CompressedMatrix
17882       {
17883          {
17884             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17885             using T2 = CompressedMatrix<double,rowMajor>;
17886             using RT = DynamicMatrix<double,rowMajor>;
17887             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17888 
17889             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17890             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17891             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17892          }
17893          {
17894             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17895             using T2 = CompressedMatrix<double,columnMajor>;
17896             using RT = DynamicMatrix<double,rowMajor>;
17897             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17898 
17899             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17900             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17901             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17902          }
17903          {
17904             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17905             using T2 = CompressedMatrix<double,rowMajor>;
17906             using RT = DynamicMatrix<double,columnMajor>;
17907             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17908 
17909             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17910             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17911             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17912          }
17913          {
17914             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17915             using T2 = CompressedMatrix<double,columnMajor>;
17916             using RT = DynamicMatrix<double,columnMajor>;
17917             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17918 
17919             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17920             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17921             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17922          }
17923       }
17924 
17925       // .../IdentityMatrix
17926       {
17927          {
17928             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17929             using T2 = IdentityMatrix<double,rowMajor>;
17930             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
17931             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17932 
17933             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17934             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17935             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17936          }
17937          {
17938             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17939             using T2 = IdentityMatrix<double,columnMajor>;
17940             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
17941             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17942 
17943             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17944             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17945             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17946          }
17947          {
17948             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17949             using T2 = IdentityMatrix<double,rowMajor>;
17950             using RT = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
17951             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17952 
17953             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17954             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17955             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17956          }
17957          {
17958             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17959             using T2 = IdentityMatrix<double,columnMajor>;
17960             using RT = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
17961             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17962 
17963             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17964             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17965             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17966          }
17967       }
17968 
17969       // .../ZeroMatrix
17970       {
17971          {
17972             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17973             using T2 = ZeroMatrix<double,rowMajor>;
17974             using RT = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
17975             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17976 
17977             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17978             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17979             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17980          }
17981          {
17982             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
17983             using T2 = ZeroMatrix<double,columnMajor>;
17984             using RT = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
17985             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17986 
17987             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17988             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17989             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
17990          }
17991          {
17992             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
17993             using T2 = ZeroMatrix<double,rowMajor>;
17994             using RT = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
17995             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
17996 
17997             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
17998             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
17999             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18000          }
18001          {
18002             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18003             using T2 = ZeroMatrix<double,columnMajor>;
18004             using RT = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
18005             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18006 
18007             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18008             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18009             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18010          }
18011       }
18012 
18013       // .../SymmetricMatrix<DynamicMatrix> (real)
18014       {
18015          {
18016             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18017             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
18018             using RT = DynamicMatrix<double,rowMajor>;
18019             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18020 
18021             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18022             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18023             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18024          }
18025          {
18026             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18027             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
18028             using RT = DynamicMatrix<double,rowMajor>;
18029             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18030 
18031             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18032             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18033             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18034          }
18035          {
18036             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18037             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
18038             using RT = DynamicMatrix<double,columnMajor>;
18039             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18040 
18041             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18042             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18043             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18044          }
18045          {
18046             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18047             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
18048             using RT = DynamicMatrix<double,columnMajor>;
18049             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18050 
18051             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18052             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18053             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18054          }
18055       }
18056 
18057       // .../SymmetricMatrix<DynamicMatrix> (complex)
18058       {
18059          {
18060             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18061             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
18062             using RT = DynamicMatrix<complex<int>,rowMajor>;
18063             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18064 
18065             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18066             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18067             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18068          }
18069          {
18070             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18071             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
18072             using RT = DynamicMatrix<complex<int>,rowMajor>;
18073             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18074 
18075             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18076             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18077             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18078          }
18079          {
18080             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18081             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
18082             using RT = DynamicMatrix<complex<int>,columnMajor>;
18083             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18084 
18085             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18086             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18087             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18088          }
18089          {
18090             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18091             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
18092             using RT = DynamicMatrix<complex<int>,columnMajor>;
18093             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18094 
18095             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18096             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18097             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18098          }
18099       }
18100 
18101       // .../SymmetricMatrix<UniformMatrix>
18102       {
18103          {
18104             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18105             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
18106             using RT = DynamicMatrix<double,rowMajor>;
18107             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18108 
18109             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18110             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18111             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18112          }
18113          {
18114             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18115             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
18116             using RT = DynamicMatrix<double,rowMajor>;
18117             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18118 
18119             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18120             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18121             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18122          }
18123          {
18124             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18125             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
18126             using RT = DynamicMatrix<double,columnMajor>;
18127             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18128 
18129             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18130             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18131             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18132          }
18133          {
18134             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18135             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
18136             using RT = DynamicMatrix<double,columnMajor>;
18137             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18138 
18139             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18140             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18141             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18142          }
18143       }
18144 
18145       // .../SymmetricMatrix<ZeroMatrix>
18146       {
18147          {
18148             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18149             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
18150             using RT = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
18151             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18152 
18153             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18154             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18155             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18156          }
18157          {
18158             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18159             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
18160             using RT = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
18161             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18162 
18163             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18164             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18165             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18166          }
18167          {
18168             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18169             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
18170             using RT = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
18171             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18172 
18173             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18174             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18175             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18176          }
18177          {
18178             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18179             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
18180             using RT = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
18181             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18182 
18183             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18184             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18185             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18186          }
18187       }
18188 
18189       // .../HermitianMatrix<DynamicMatrix> (symmetric)
18190       {
18191          {
18192             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18193             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
18194             using RT = DynamicMatrix<double,rowMajor>;
18195             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18196 
18197             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18198             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18199             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18200          }
18201          {
18202             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18203             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
18204             using RT = DynamicMatrix<double,rowMajor>;
18205             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18206 
18207             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18208             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18209             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18210          }
18211          {
18212             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18213             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
18214             using RT = DynamicMatrix<double,columnMajor>;
18215             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18216 
18217             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18218             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18219             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18220          }
18221          {
18222             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18223             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
18224             using RT = DynamicMatrix<double,columnMajor>;
18225             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18226 
18227             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18228             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18229             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18230          }
18231       }
18232 
18233       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
18234       {
18235          {
18236             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18237             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
18238             using RT = DynamicMatrix<complex<int>,rowMajor>;
18239             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18240 
18241             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18242             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18243             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18244          }
18245          {
18246             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18247             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
18248             using RT = DynamicMatrix<complex<int>,rowMajor>;
18249             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18250 
18251             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18252             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18253             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18254          }
18255          {
18256             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18257             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
18258             using RT = DynamicMatrix<complex<int>,rowMajor>;
18259             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18260 
18261             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18262             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18263             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18264          }
18265          {
18266             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18267             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
18268             using RT = DynamicMatrix<complex<int>,columnMajor>;
18269             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18270 
18271             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18272             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18273             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18274          }
18275       }
18276 
18277       // .../LowerMatrix<DynamicMatrix>
18278       {
18279          {
18280             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18281             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
18282             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
18283             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18284 
18285             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18286             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18287             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18288          }
18289          {
18290             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18291             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
18292             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
18293             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18294 
18295             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18296             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18297             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18298          }
18299          {
18300             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18301             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
18302             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
18303             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18304 
18305             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18306             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18307             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18308          }
18309          {
18310             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18311             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
18312             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
18313             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18314 
18315             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18316             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18317             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18318          }
18319       }
18320 
18321       // .../UniLowerMatrix<DynamicMatrix>
18322       {
18323          {
18324             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18325             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
18326             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
18327             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18328 
18329             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18330             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18331             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18332          }
18333          {
18334             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18335             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
18336             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
18337             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18338 
18339             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18340             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18341             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18342          }
18343          {
18344             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18345             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
18346             using RT = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
18347             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18348 
18349             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18350             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18351             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18352          }
18353          {
18354             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18355             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
18356             using RT = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
18357             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18358 
18359             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18360             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18361             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18362          }
18363       }
18364 
18365       // .../StrictlyLowerMatrix<DynamicMatrix>
18366       {
18367          {
18368             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18369             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
18370             using RT = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
18371             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18372 
18373             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18374             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18375             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18376          }
18377          {
18378             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18379             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
18380             using RT = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
18381             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18382 
18383             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18384             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18385             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18386          }
18387          {
18388             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18389             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
18390             using RT = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
18391             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18392 
18393             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18394             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18395             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18396          }
18397          {
18398             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18399             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
18400             using RT = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
18401             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18402 
18403             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18404             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18405             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18406          }
18407       }
18408 
18409       // .../UpperMatrix<DynamicMatrix>
18410       {
18411          {
18412             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18413             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
18414             using RT = DynamicMatrix<double,rowMajor>;
18415             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18416 
18417             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18418             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18419             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18420          }
18421          {
18422             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18423             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
18424             using RT = DynamicMatrix<double,rowMajor>;
18425             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18426 
18427             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18428             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18429             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18430          }
18431          {
18432             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18433             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
18434             using RT = DynamicMatrix<double,rowMajor>;
18435             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18436 
18437             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18438             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18439             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18440          }
18441          {
18442             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18443             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
18444             using RT = DynamicMatrix<double,columnMajor>;
18445             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18446 
18447             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18448             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18449             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18450          }
18451       }
18452 
18453       // .../UniUpperMatrix<DynamicMatrix>
18454       {
18455          {
18456             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18457             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
18458             using RT = DynamicMatrix<double,rowMajor>;
18459             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18460 
18461             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18462             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18463             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18464          }
18465          {
18466             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18467             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
18468             using RT = DynamicMatrix<double,rowMajor>;
18469             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18470 
18471             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18472             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18473             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18474          }
18475          {
18476             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18477             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
18478             using RT = DynamicMatrix<double,rowMajor>;
18479             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18480 
18481             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18482             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18483             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18484          }
18485          {
18486             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18487             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
18488             using RT = DynamicMatrix<double,columnMajor>;
18489             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18490 
18491             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18492             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18493             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18494          }
18495       }
18496 
18497       // .../StrictlyUpperMatrix<DynamicMatrix>
18498       {
18499          {
18500             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18501             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
18502             using RT = DynamicMatrix<double,rowMajor>;
18503             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18504 
18505             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18506             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18507             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18508          }
18509          {
18510             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18511             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
18512             using RT = DynamicMatrix<double,rowMajor>;
18513             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18514 
18515             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18516             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18517             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18518          }
18519          {
18520             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18521             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
18522             using RT = DynamicMatrix<double,rowMajor>;
18523             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18524 
18525             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18526             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18527             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18528          }
18529          {
18530             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18531             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
18532             using RT = DynamicMatrix<double,columnMajor>;
18533             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18534 
18535             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18536             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18537             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18538          }
18539       }
18540 
18541       // .../DiagonalMatrix<DynamicMatrix>
18542       {
18543          {
18544             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18545             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
18546             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
18547             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18548 
18549             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18550             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18551             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18552          }
18553          {
18554             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
18555             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
18556             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
18557             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18558 
18559             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18560             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18561             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18562          }
18563          {
18564             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18565             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
18566             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
18567             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18568 
18569             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18570             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18571             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18572          }
18573          {
18574             using T1 = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
18575             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
18576             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
18577             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18578 
18579             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18580             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18581             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18582          }
18583       }
18584    }
18585 
18586    // UpperMatrix<DynamicMatrix>/...
18587    {
18588       // .../StaticMatrix
18589       {
18590          {
18591             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18592             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
18593             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
18594             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18595 
18596             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18597             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18598             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18599          }
18600          {
18601             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18602             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
18603             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
18604             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18605 
18606             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18607             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18608             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18609          }
18610          {
18611             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18612             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
18613             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
18614             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18615 
18616             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18617             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18618             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18619          }
18620          {
18621             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18622             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
18623             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
18624             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18625 
18626             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18627             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18628             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18629          }
18630       }
18631 
18632       // .../HybridMatrix
18633       {
18634          {
18635             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18636             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
18637             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
18638             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18639 
18640             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18641             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18642             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18643          }
18644          {
18645             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18646             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
18647             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
18648             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18649 
18650             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18651             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18652             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18653          }
18654          {
18655             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18656             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
18657             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
18658             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18659 
18660             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18661             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18662             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18663          }
18664          {
18665             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18666             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
18667             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
18668             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18669 
18670             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18671             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18672             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18673          }
18674       }
18675 
18676       // .../DynamicMatrix
18677       {
18678          {
18679             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18680             using T2 = DynamicMatrix<double,rowMajor>;
18681             using RT = DynamicMatrix<double,rowMajor>;
18682             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18683 
18684             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18685             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18686             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18687          }
18688          {
18689             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18690             using T2 = DynamicMatrix<double,columnMajor>;
18691             using RT = DynamicMatrix<double,rowMajor>;
18692             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18693 
18694             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18695             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18696             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18697          }
18698          {
18699             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18700             using T2 = DynamicMatrix<double,rowMajor>;
18701             using RT = DynamicMatrix<double,rowMajor>;
18702             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18703 
18704             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18705             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18706             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18707          }
18708          {
18709             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18710             using T2 = DynamicMatrix<double,columnMajor>;
18711             using RT = DynamicMatrix<double,columnMajor>;
18712             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18713 
18714             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18715             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18716             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18717          }
18718       }
18719 
18720       // .../CustomMatrix
18721       {
18722          {
18723             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18724             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
18725             using RT = DynamicMatrix<double,rowMajor>;
18726             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18727 
18728             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18729             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18730             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18731          }
18732          {
18733             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18734             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
18735             using RT = DynamicMatrix<double,rowMajor>;
18736             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18737 
18738             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18739             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18740             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18741          }
18742          {
18743             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18744             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
18745             using RT = DynamicMatrix<double,rowMajor>;
18746             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18747 
18748             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18749             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18750             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18751          }
18752          {
18753             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18754             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
18755             using RT = DynamicMatrix<double,columnMajor>;
18756             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18757 
18758             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18759             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18760             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18761          }
18762       }
18763 
18764       // .../UniformMatrix
18765       {
18766          {
18767             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18768             using T2 = UniformMatrix<double,rowMajor>;
18769             using RT = DynamicMatrix<double,rowMajor>;
18770             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18771 
18772             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18773             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18774             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18775          }
18776          {
18777             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18778             using T2 = UniformMatrix<double,columnMajor>;
18779             using RT = DynamicMatrix<double,rowMajor>;
18780             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18781 
18782             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18783             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18784             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18785          }
18786          {
18787             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18788             using T2 = UniformMatrix<double,rowMajor>;
18789             using RT = DynamicMatrix<double,rowMajor>;
18790             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18791 
18792             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18793             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18794             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18795          }
18796          {
18797             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18798             using T2 = UniformMatrix<double,columnMajor>;
18799             using RT = DynamicMatrix<double,columnMajor>;
18800             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18801 
18802             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18803             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18804             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18805          }
18806       }
18807 
18808       // .../InitializerMatrix
18809       {
18810          {
18811             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18812             using T2 = InitializerMatrix<double>;
18813             using RT = DynamicMatrix<double,rowMajor>;
18814             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18815 
18816             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18817             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18818             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18819          }
18820          {
18821             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18822             using T2 = InitializerMatrix<double>;
18823             using RT = DynamicMatrix<double,rowMajor>;
18824             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18825 
18826             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18827             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18828             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18829          }
18830       }
18831 
18832       // .../CompressedMatrix
18833       {
18834          {
18835             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18836             using T2 = CompressedMatrix<double,rowMajor>;
18837             using RT = DynamicMatrix<double,rowMajor>;
18838             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18839 
18840             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18841             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18842             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18843          }
18844          {
18845             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18846             using T2 = CompressedMatrix<double,columnMajor>;
18847             using RT = DynamicMatrix<double,rowMajor>;
18848             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18849 
18850             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18851             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18852             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18853          }
18854          {
18855             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18856             using T2 = CompressedMatrix<double,rowMajor>;
18857             using RT = DynamicMatrix<double,columnMajor>;
18858             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18859 
18860             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18861             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18862             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18863          }
18864          {
18865             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18866             using T2 = CompressedMatrix<double,columnMajor>;
18867             using RT = DynamicMatrix<double,columnMajor>;
18868             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18869 
18870             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18871             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18872             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18873          }
18874       }
18875 
18876       // .../IdentityMatrix
18877       {
18878          {
18879             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18880             using T2 = IdentityMatrix<double,rowMajor>;
18881             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
18882             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18883 
18884             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18885             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18886             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18887          }
18888          {
18889             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18890             using T2 = IdentityMatrix<double,columnMajor>;
18891             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
18892             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18893 
18894             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18895             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18896             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18897          }
18898          {
18899             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18900             using T2 = IdentityMatrix<double,rowMajor>;
18901             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
18902             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18903 
18904             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18905             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18906             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18907          }
18908          {
18909             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18910             using T2 = IdentityMatrix<double,columnMajor>;
18911             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
18912             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18913 
18914             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18915             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18916             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18917          }
18918       }
18919 
18920       // .../ZeroMatrix
18921       {
18922          {
18923             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18924             using T2 = ZeroMatrix<double,rowMajor>;
18925             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
18926             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18927 
18928             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18929             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18930             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18931          }
18932          {
18933             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18934             using T2 = ZeroMatrix<double,columnMajor>;
18935             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
18936             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18937 
18938             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18939             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18940             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18941          }
18942          {
18943             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18944             using T2 = ZeroMatrix<double,rowMajor>;
18945             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
18946             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18947 
18948             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18949             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18950             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18951          }
18952          {
18953             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18954             using T2 = ZeroMatrix<double,columnMajor>;
18955             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
18956             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18957 
18958             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18959             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18960             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18961          }
18962       }
18963 
18964       // .../SymmetricMatrix<DynamicMatrix> (real)
18965       {
18966          {
18967             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18968             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
18969             using RT = DynamicMatrix<double,rowMajor>;
18970             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18971 
18972             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18973             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18974             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18975          }
18976          {
18977             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
18978             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
18979             using RT = DynamicMatrix<double,rowMajor>;
18980             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18981 
18982             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18983             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18984             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18985          }
18986          {
18987             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18988             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
18989             using RT = DynamicMatrix<double,columnMajor>;
18990             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
18991 
18992             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
18993             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
18994             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
18995          }
18996          {
18997             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
18998             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
18999             using RT = DynamicMatrix<double,columnMajor>;
19000             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19001 
19002             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19003             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19004             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19005          }
19006       }
19007 
19008       // .../SymmetricMatrix<DynamicMatrix> (complex)
19009       {
19010          {
19011             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19012             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
19013             using RT = DynamicMatrix<complex<int>,rowMajor>;
19014             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19015 
19016             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19017             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19018             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19019          }
19020          {
19021             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19022             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
19023             using RT = DynamicMatrix<complex<int>,rowMajor>;
19024             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19025 
19026             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19027             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19028             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19029          }
19030          {
19031             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19032             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
19033             using RT = DynamicMatrix<complex<int>,columnMajor>;
19034             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19035 
19036             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19037             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19038             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19039          }
19040          {
19041             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19042             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
19043             using RT = DynamicMatrix<complex<int>,columnMajor>;
19044             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19045 
19046             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19047             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19048             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19049          }
19050       }
19051 
19052       // .../SymmetricMatrix<UniformMatrix>
19053       {
19054          {
19055             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19056             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
19057             using RT = DynamicMatrix<double,rowMajor>;
19058             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19059 
19060             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19061             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19062             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19063          }
19064          {
19065             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19066             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
19067             using RT = DynamicMatrix<double,rowMajor>;
19068             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19069 
19070             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19071             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19072             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19073          }
19074          {
19075             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19076             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
19077             using RT = DynamicMatrix<double,columnMajor>;
19078             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19079 
19080             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19081             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19082             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19083          }
19084          {
19085             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19086             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
19087             using RT = DynamicMatrix<double,columnMajor>;
19088             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19089 
19090             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19091             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19092             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19093          }
19094       }
19095 
19096       // .../SymmetricMatrix<ZeroMatrix>
19097       {
19098          {
19099             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19100             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
19101             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19102             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19103 
19104             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19105             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19106             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19107          }
19108          {
19109             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19110             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
19111             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19112             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19113 
19114             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19115             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19116             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19117          }
19118          {
19119             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19120             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
19121             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
19122             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19123 
19124             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19125             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19126             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19127          }
19128          {
19129             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19130             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
19131             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
19132             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19133 
19134             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19135             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19136             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19137          }
19138       }
19139 
19140       // .../HermitianMatrix<DynamicMatrix> (symmetric)
19141       {
19142          {
19143             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19144             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
19145             using RT = DynamicMatrix<double,rowMajor>;
19146             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19147 
19148             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19149             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19150             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19151          }
19152          {
19153             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19154             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
19155             using RT = DynamicMatrix<double,rowMajor>;
19156             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19157 
19158             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19159             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19160             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19161          }
19162          {
19163             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19164             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
19165             using RT = DynamicMatrix<double,columnMajor>;
19166             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19167 
19168             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19169             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19170             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19171          }
19172          {
19173             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19174             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
19175             using RT = DynamicMatrix<double,columnMajor>;
19176             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19177 
19178             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19179             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19180             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19181          }
19182       }
19183 
19184       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
19185       {
19186          {
19187             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19188             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
19189             using RT = DynamicMatrix<complex<int>,rowMajor>;
19190             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19191 
19192             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19193             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19194             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19195          }
19196          {
19197             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19198             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
19199             using RT = DynamicMatrix<complex<int>,rowMajor>;
19200             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19201 
19202             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19203             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19204             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19205          }
19206          {
19207             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19208             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
19209             using RT = DynamicMatrix<complex<int>,rowMajor>;
19210             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19211 
19212             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19213             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19214             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19215          }
19216          {
19217             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19218             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
19219             using RT = DynamicMatrix<complex<int>,columnMajor>;
19220             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19221 
19222             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19223             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19224             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19225          }
19226       }
19227 
19228       // .../LowerMatrix<DynamicMatrix>
19229       {
19230          {
19231             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19232             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
19233             using RT = DynamicMatrix<double,rowMajor>;
19234             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19235 
19236             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19237             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19238             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19239          }
19240          {
19241             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19242             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
19243             using RT = DynamicMatrix<double,rowMajor>;
19244             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19245 
19246             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19247             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19248             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19249          }
19250          {
19251             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19252             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
19253             using RT = DynamicMatrix<double,rowMajor>;
19254             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19255 
19256             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19257             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19258             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19259          }
19260          {
19261             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19262             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
19263             using RT = DynamicMatrix<double,columnMajor>;
19264             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19265 
19266             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19267             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19268             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19269          }
19270       }
19271 
19272       // .../UniLowerMatrix<DynamicMatrix>
19273       {
19274          {
19275             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19276             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
19277             using RT = DynamicMatrix<double,rowMajor>;
19278             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19279 
19280             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19281             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19282             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19283          }
19284          {
19285             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19286             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
19287             using RT = DynamicMatrix<double,rowMajor>;
19288             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19289 
19290             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19291             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19292             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19293          }
19294          {
19295             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19296             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
19297             using RT = DynamicMatrix<double,rowMajor>;
19298             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19299 
19300             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19301             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19302             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19303          }
19304          {
19305             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19306             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
19307             using RT = DynamicMatrix<double,columnMajor>;
19308             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19309 
19310             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19311             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19312             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19313          }
19314       }
19315 
19316       // .../StrictlyLowerMatrix<DynamicMatrix>
19317       {
19318          {
19319             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19320             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
19321             using RT = DynamicMatrix<double,rowMajor>;
19322             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19323 
19324             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19325             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19326             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19327          }
19328          {
19329             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19330             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
19331             using RT = DynamicMatrix<double,rowMajor>;
19332             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19333 
19334             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19335             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19336             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19337          }
19338          {
19339             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19340             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
19341             using RT = DynamicMatrix<double,rowMajor>;
19342             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19343 
19344             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19345             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19346             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19347          }
19348          {
19349             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19350             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
19351             using RT = DynamicMatrix<double,columnMajor>;
19352             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19353 
19354             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19355             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19356             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19357          }
19358       }
19359 
19360       // .../UpperMatrix<DynamicMatrix>
19361       {
19362          {
19363             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19364             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19365             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19366             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19367 
19368             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19369             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19370             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19371          }
19372          {
19373             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19374             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
19375             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19376             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19377 
19378             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19379             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19380             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19381          }
19382          {
19383             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19384             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19385             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19386             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19387 
19388             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19389             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19390             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19391          }
19392          {
19393             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19394             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
19395             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
19396             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19397 
19398             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19399             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19400             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19401          }
19402       }
19403 
19404       // .../UniUpperMatrix<DynamicMatrix>
19405       {
19406          {
19407             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19408             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
19409             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19410             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19411 
19412             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19413             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19414             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19415          }
19416          {
19417             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19418             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
19419             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19420             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19421 
19422             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19423             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19424             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19425          }
19426          {
19427             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19428             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
19429             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19430             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19431 
19432             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19433             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19434             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19435          }
19436          {
19437             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19438             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
19439             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
19440             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19441 
19442             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19443             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19444             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19445          }
19446       }
19447 
19448       // .../StrictlyUpperMatrix<DynamicMatrix>
19449       {
19450          {
19451             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19452             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
19453             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19454             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19455 
19456             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19457             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19458             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19459          }
19460          {
19461             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19462             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
19463             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19464             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19465 
19466             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19467             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19468             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19469          }
19470          {
19471             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19472             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
19473             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19474             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19475 
19476             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19477             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19478             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19479          }
19480          {
19481             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19482             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
19483             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
19484             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19485 
19486             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19487             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19488             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19489          }
19490       }
19491 
19492       // .../DiagonalMatrix<DynamicMatrix>
19493       {
19494          {
19495             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19496             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
19497             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19498             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19499 
19500             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19501             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19502             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19503          }
19504          {
19505             using T1 = UpperMatrix< DynamicMatrix<int,rowMajor> >;
19506             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
19507             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19508             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19509 
19510             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19511             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19512             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19513          }
19514          {
19515             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19516             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
19517             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
19518             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19519 
19520             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19521             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19522             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19523          }
19524          {
19525             using T1 = UpperMatrix< DynamicMatrix<int,columnMajor> >;
19526             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
19527             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
19528             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19529 
19530             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19531             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19532             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19533          }
19534       }
19535    }
19536 
19537    // UniUpperMatrix<DynamicMatrix>/...
19538    {
19539       // .../StaticMatrix
19540       {
19541          {
19542             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19543             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
19544             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
19545             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19546 
19547             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19548             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19549             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19550          }
19551          {
19552             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19553             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
19554             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
19555             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19556 
19557             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19558             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19559             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19560          }
19561          {
19562             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19563             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
19564             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
19565             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19566 
19567             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19568             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19569             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19570          }
19571          {
19572             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19573             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
19574             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
19575             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19576 
19577             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19578             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19579             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19580          }
19581       }
19582 
19583       // .../HybridMatrix
19584       {
19585          {
19586             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19587             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
19588             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
19589             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19590 
19591             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19592             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19593             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19594          }
19595          {
19596             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19597             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
19598             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
19599             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19600 
19601             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19602             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19603             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19604          }
19605          {
19606             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19607             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
19608             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
19609             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19610 
19611             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19612             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19613             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19614          }
19615          {
19616             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19617             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
19618             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
19619             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19620 
19621             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19622             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19623             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19624          }
19625       }
19626 
19627       // .../DynamicMatrix
19628       {
19629          {
19630             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19631             using T2 = DynamicMatrix<double,rowMajor>;
19632             using RT = DynamicMatrix<double,rowMajor>;
19633             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19634 
19635             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19636             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19637             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19638          }
19639          {
19640             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19641             using T2 = DynamicMatrix<double,columnMajor>;
19642             using RT = DynamicMatrix<double,rowMajor>;
19643             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19644 
19645             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19646             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19647             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19648          }
19649          {
19650             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19651             using T2 = DynamicMatrix<double,rowMajor>;
19652             using RT = DynamicMatrix<double,rowMajor>;
19653             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19654 
19655             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19656             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19657             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19658          }
19659          {
19660             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19661             using T2 = DynamicMatrix<double,columnMajor>;
19662             using RT = DynamicMatrix<double,columnMajor>;
19663             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19664 
19665             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19666             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19667             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19668          }
19669       }
19670 
19671       // .../CustomMatrix
19672       {
19673          {
19674             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19675             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
19676             using RT = DynamicMatrix<double,rowMajor>;
19677             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19678 
19679             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19680             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19681             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19682          }
19683          {
19684             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19685             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
19686             using RT = DynamicMatrix<double,rowMajor>;
19687             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19688 
19689             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19690             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19691             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19692          }
19693          {
19694             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19695             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
19696             using RT = DynamicMatrix<double,rowMajor>;
19697             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19698 
19699             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19700             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19701             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19702          }
19703          {
19704             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19705             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
19706             using RT = DynamicMatrix<double,columnMajor>;
19707             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19708 
19709             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19710             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19711             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19712          }
19713       }
19714 
19715       // .../UniformMatrix
19716       {
19717          {
19718             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19719             using T2 = UniformMatrix<double,rowMajor>;
19720             using RT = DynamicMatrix<double,rowMajor>;
19721             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19722 
19723             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19724             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19725             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19726          }
19727          {
19728             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19729             using T2 = UniformMatrix<double,columnMajor>;
19730             using RT = DynamicMatrix<double,rowMajor>;
19731             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19732 
19733             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19734             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19735             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19736          }
19737          {
19738             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19739             using T2 = UniformMatrix<double,rowMajor>;
19740             using RT = DynamicMatrix<double,rowMajor>;
19741             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19742 
19743             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19744             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19745             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19746          }
19747          {
19748             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19749             using T2 = UniformMatrix<double,columnMajor>;
19750             using RT = DynamicMatrix<double,columnMajor>;
19751             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19752 
19753             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19754             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19755             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19756          }
19757       }
19758 
19759       // .../InitializerMatrix
19760       {
19761          {
19762             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19763             using T2 = InitializerMatrix<double>;
19764             using RT = DynamicMatrix<double,rowMajor>;
19765             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19766 
19767             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19768             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19769             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19770          }
19771          {
19772             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19773             using T2 = InitializerMatrix<double>;
19774             using RT = DynamicMatrix<double,rowMajor>;
19775             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19776 
19777             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19778             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19779             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19780          }
19781       }
19782 
19783       // .../CompressedMatrix
19784       {
19785          {
19786             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19787             using T2 = CompressedMatrix<double,rowMajor>;
19788             using RT = DynamicMatrix<double,rowMajor>;
19789             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19790 
19791             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19792             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19793             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19794          }
19795          {
19796             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19797             using T2 = CompressedMatrix<double,columnMajor>;
19798             using RT = DynamicMatrix<double,rowMajor>;
19799             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19800 
19801             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19802             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19803             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19804          }
19805          {
19806             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19807             using T2 = CompressedMatrix<double,rowMajor>;
19808             using RT = DynamicMatrix<double,columnMajor>;
19809             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19810 
19811             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19812             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19813             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19814          }
19815          {
19816             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19817             using T2 = CompressedMatrix<double,columnMajor>;
19818             using RT = DynamicMatrix<double,columnMajor>;
19819             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19820 
19821             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19822             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19823             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19824          }
19825       }
19826 
19827       // .../IdentityMatrix
19828       {
19829          {
19830             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19831             using T2 = IdentityMatrix<double,rowMajor>;
19832             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19833             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19834 
19835             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19836             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19837             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19838          }
19839          {
19840             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19841             using T2 = IdentityMatrix<double,columnMajor>;
19842             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
19843             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19844 
19845             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19846             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19847             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19848          }
19849          {
19850             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19851             using T2 = IdentityMatrix<double,rowMajor>;
19852             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
19853             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19854 
19855             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19856             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19857             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19858          }
19859          {
19860             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19861             using T2 = IdentityMatrix<double,columnMajor>;
19862             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
19863             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19864 
19865             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19866             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19867             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19868          }
19869       }
19870 
19871       // .../ZeroMatrix
19872       {
19873          {
19874             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19875             using T2 = ZeroMatrix<double,rowMajor>;
19876             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
19877             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19878 
19879             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19880             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19881             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19882          }
19883          {
19884             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19885             using T2 = ZeroMatrix<double,columnMajor>;
19886             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
19887             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19888 
19889             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19890             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19891             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19892          }
19893          {
19894             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19895             using T2 = ZeroMatrix<double,rowMajor>;
19896             using RT = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
19897             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19898 
19899             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19900             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19901             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19902          }
19903          {
19904             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19905             using T2 = ZeroMatrix<double,columnMajor>;
19906             using RT = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
19907             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19908 
19909             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19910             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19911             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19912          }
19913       }
19914 
19915       // .../SymmetricMatrix<DynamicMatrix> (real)
19916       {
19917          {
19918             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19919             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
19920             using RT = DynamicMatrix<double,rowMajor>;
19921             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19922 
19923             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19924             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19925             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19926          }
19927          {
19928             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19929             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
19930             using RT = DynamicMatrix<double,rowMajor>;
19931             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19932 
19933             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19934             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19935             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19936          }
19937          {
19938             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19939             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
19940             using RT = DynamicMatrix<double,columnMajor>;
19941             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19942 
19943             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19944             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19945             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19946          }
19947          {
19948             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19949             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
19950             using RT = DynamicMatrix<double,columnMajor>;
19951             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19952 
19953             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19954             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19955             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19956          }
19957       }
19958 
19959       // .../SymmetricMatrix<DynamicMatrix> (complex)
19960       {
19961          {
19962             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19963             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
19964             using RT = DynamicMatrix<complex<int>,rowMajor>;
19965             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19966 
19967             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19968             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19969             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19970          }
19971          {
19972             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
19973             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
19974             using RT = DynamicMatrix<complex<int>,rowMajor>;
19975             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19976 
19977             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19978             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19979             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19980          }
19981          {
19982             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19983             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
19984             using RT = DynamicMatrix<complex<int>,columnMajor>;
19985             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19986 
19987             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19988             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19989             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
19990          }
19991          {
19992             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
19993             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
19994             using RT = DynamicMatrix<complex<int>,columnMajor>;
19995             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
19996 
19997             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
19998             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
19999             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20000          }
20001       }
20002 
20003       // .../SymmetricMatrix<UniformMatrix>
20004       {
20005          {
20006             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20007             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
20008             using RT = DynamicMatrix<double,rowMajor>;
20009             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20010 
20011             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20012             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20013             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20014          }
20015          {
20016             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20017             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
20018             using RT = DynamicMatrix<double,rowMajor>;
20019             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20020 
20021             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20022             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20023             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20024          }
20025          {
20026             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20027             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
20028             using RT = DynamicMatrix<double,columnMajor>;
20029             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20030 
20031             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20032             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20033             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20034          }
20035          {
20036             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20037             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
20038             using RT = DynamicMatrix<double,columnMajor>;
20039             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20040 
20041             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20042             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20043             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20044          }
20045       }
20046 
20047       // .../SymmetricMatrix<ZeroMatrix>
20048       {
20049          {
20050             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20051             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
20052             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
20053             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20054 
20055             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20056             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20057             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20058          }
20059          {
20060             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20061             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
20062             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
20063             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20064 
20065             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20066             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20067             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20068          }
20069          {
20070             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20071             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
20072             using RT = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
20073             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20074 
20075             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20076             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20077             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20078          }
20079          {
20080             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20081             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
20082             using RT = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
20083             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20084 
20085             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20086             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20087             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20088          }
20089       }
20090 
20091       // .../HermitianMatrix<DynamicMatrix> (symmetric)
20092       {
20093          {
20094             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20095             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
20096             using RT = DynamicMatrix<double,rowMajor>;
20097             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20098 
20099             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20100             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20101             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20102          }
20103          {
20104             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20105             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
20106             using RT = DynamicMatrix<double,rowMajor>;
20107             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20108 
20109             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20110             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20111             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20112          }
20113          {
20114             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20115             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
20116             using RT = DynamicMatrix<double,columnMajor>;
20117             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20118 
20119             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20120             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20121             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20122          }
20123          {
20124             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20125             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
20126             using RT = DynamicMatrix<double,columnMajor>;
20127             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20128 
20129             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20130             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20131             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20132          }
20133       }
20134 
20135       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
20136       {
20137          {
20138             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20139             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
20140             using RT = DynamicMatrix<complex<int>,rowMajor>;
20141             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20142 
20143             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20144             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20145             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20146          }
20147          {
20148             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20149             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
20150             using RT = DynamicMatrix<complex<int>,rowMajor>;
20151             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20152 
20153             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20154             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20155             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20156          }
20157          {
20158             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20159             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
20160             using RT = DynamicMatrix<complex<int>,rowMajor>;
20161             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20162 
20163             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20164             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20165             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20166          }
20167          {
20168             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20169             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
20170             using RT = DynamicMatrix<complex<int>,columnMajor>;
20171             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20172 
20173             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20174             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20175             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20176          }
20177       }
20178 
20179       // .../LowerMatrix<DynamicMatrix>
20180       {
20181          {
20182             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20183             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
20184             using RT = DynamicMatrix<double,rowMajor>;
20185             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20186 
20187             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20188             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20189             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20190          }
20191          {
20192             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20193             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
20194             using RT = DynamicMatrix<double,rowMajor>;
20195             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20196 
20197             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20198             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20199             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20200          }
20201          {
20202             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20203             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
20204             using RT = DynamicMatrix<double,rowMajor>;
20205             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20206 
20207             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20208             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20209             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20210          }
20211          {
20212             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20213             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
20214             using RT = DynamicMatrix<double,columnMajor>;
20215             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20216 
20217             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20218             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20219             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20220          }
20221       }
20222 
20223       // .../UniLowerMatrix<DynamicMatrix>
20224       {
20225          {
20226             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20227             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
20228             using RT = DynamicMatrix<double,rowMajor>;
20229             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20230 
20231             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20232             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20233             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20234          }
20235          {
20236             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20237             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
20238             using RT = DynamicMatrix<double,rowMajor>;
20239             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20240 
20241             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20242             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20243             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20244          }
20245          {
20246             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20247             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
20248             using RT = DynamicMatrix<double,rowMajor>;
20249             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20250 
20251             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20252             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20253             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20254          }
20255          {
20256             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20257             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
20258             using RT = DynamicMatrix<double,columnMajor>;
20259             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20260 
20261             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20262             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20263             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20264          }
20265       }
20266 
20267       // .../StrictlyLowerMatrix<DynamicMatrix>
20268       {
20269          {
20270             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20271             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
20272             using RT = DynamicMatrix<double,rowMajor>;
20273             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20274 
20275             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20276             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20277             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20278          }
20279          {
20280             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20281             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
20282             using RT = DynamicMatrix<double,rowMajor>;
20283             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20284 
20285             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20286             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20287             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20288          }
20289          {
20290             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20291             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
20292             using RT = DynamicMatrix<double,rowMajor>;
20293             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20294 
20295             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20296             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20297             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20298          }
20299          {
20300             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20301             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
20302             using RT = DynamicMatrix<double,columnMajor>;
20303             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20304 
20305             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20306             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20307             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20308          }
20309       }
20310 
20311       // .../UpperMatrix<DynamicMatrix>
20312       {
20313          {
20314             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20315             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
20316             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
20317             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20318 
20319             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20320             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20321             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20322          }
20323          {
20324             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20325             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
20326             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
20327             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20328 
20329             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20330             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20331             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20332          }
20333          {
20334             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20335             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
20336             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
20337             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20338 
20339             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20340             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20341             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20342          }
20343          {
20344             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20345             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
20346             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
20347             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20348 
20349             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20350             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20351             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20352          }
20353       }
20354 
20355       // .../UniUpperMatrix<DynamicMatrix>
20356       {
20357          {
20358             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20359             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
20360             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
20361             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20362 
20363             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20364             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20365             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20366          }
20367          {
20368             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20369             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
20370             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
20371             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20372 
20373             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20374             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20375             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20376          }
20377          {
20378             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20379             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
20380             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
20381             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20382 
20383             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20384             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20385             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20386          }
20387          {
20388             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20389             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
20390             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
20391             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20392 
20393             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20394             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20395             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20396          }
20397       }
20398 
20399       // .../StrictlyUpperMatrix<DynamicMatrix>
20400       {
20401          {
20402             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20403             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
20404             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
20405             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20406 
20407             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20408             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20409             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20410          }
20411          {
20412             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20413             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
20414             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
20415             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20416 
20417             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20418             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20419             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20420          }
20421          {
20422             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20423             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
20424             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
20425             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20426 
20427             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20428             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20429             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20430          }
20431          {
20432             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20433             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
20434             using RT = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
20435             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20436 
20437             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20438             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20439             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20440          }
20441       }
20442 
20443       // .../DiagonalMatrix<DynamicMatrix>
20444       {
20445          {
20446             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20447             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
20448             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
20449             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20450 
20451             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20452             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20453             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20454          }
20455          {
20456             using T1 = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
20457             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
20458             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
20459             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20460 
20461             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20462             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20463             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20464          }
20465          {
20466             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20467             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
20468             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
20469             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20470 
20471             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20472             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20473             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20474          }
20475          {
20476             using T1 = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
20477             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
20478             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
20479             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20480 
20481             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20482             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20483             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20484          }
20485       }
20486    }
20487 
20488    // StrictlyUpperMatrix<DynamicMatrix>/...
20489    {
20490       // .../StaticMatrix
20491       {
20492          {
20493             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20494             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
20495             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
20496             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20497 
20498             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20499             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20500             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20501          }
20502          {
20503             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20504             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
20505             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
20506             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20507 
20508             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20509             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20510             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20511          }
20512          {
20513             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20514             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
20515             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
20516             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20517 
20518             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20519             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20520             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20521          }
20522          {
20523             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20524             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
20525             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
20526             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20527 
20528             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20529             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20530             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20531          }
20532       }
20533 
20534       // .../HybridMatrix
20535       {
20536          {
20537             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20538             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
20539             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
20540             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20541 
20542             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20543             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20544             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20545          }
20546          {
20547             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20548             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
20549             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
20550             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20551 
20552             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20553             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20554             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20555          }
20556          {
20557             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20558             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
20559             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
20560             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20561 
20562             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20563             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20564             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20565          }
20566          {
20567             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20568             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
20569             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
20570             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20571 
20572             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20573             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20574             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20575          }
20576       }
20577 
20578       // .../DynamicMatrix
20579       {
20580          {
20581             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20582             using T2 = DynamicMatrix<double,rowMajor>;
20583             using RT = DynamicMatrix<double,rowMajor>;
20584             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20585 
20586             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20587             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20588             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20589          }
20590          {
20591             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20592             using T2 = DynamicMatrix<double,columnMajor>;
20593             using RT = DynamicMatrix<double,rowMajor>;
20594             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20595 
20596             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20597             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20598             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20599          }
20600          {
20601             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20602             using T2 = DynamicMatrix<double,rowMajor>;
20603             using RT = DynamicMatrix<double,rowMajor>;
20604             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20605 
20606             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20607             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20608             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20609          }
20610          {
20611             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20612             using T2 = DynamicMatrix<double,columnMajor>;
20613             using RT = DynamicMatrix<double,columnMajor>;
20614             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20615 
20616             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20617             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20618             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20619          }
20620       }
20621 
20622       // .../CustomMatrix
20623       {
20624          {
20625             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20626             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
20627             using RT = DynamicMatrix<double,rowMajor>;
20628             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20629 
20630             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20631             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20632             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20633          }
20634          {
20635             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20636             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
20637             using RT = DynamicMatrix<double,rowMajor>;
20638             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20639 
20640             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20641             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20642             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20643          }
20644          {
20645             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20646             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
20647             using RT = DynamicMatrix<double,rowMajor>;
20648             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20649 
20650             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20651             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20652             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20653          }
20654          {
20655             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20656             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
20657             using RT = DynamicMatrix<double,columnMajor>;
20658             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20659 
20660             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20661             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20662             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20663          }
20664       }
20665 
20666       // .../UniformMatrix
20667       {
20668          {
20669             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20670             using T2 = UniformMatrix<double,rowMajor>;
20671             using RT = DynamicMatrix<double,rowMajor>;
20672             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20673 
20674             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20675             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20676             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20677          }
20678          {
20679             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20680             using T2 = UniformMatrix<double,columnMajor>;
20681             using RT = DynamicMatrix<double,rowMajor>;
20682             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20683 
20684             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20685             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20686             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20687          }
20688          {
20689             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20690             using T2 = UniformMatrix<double,rowMajor>;
20691             using RT = DynamicMatrix<double,rowMajor>;
20692             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20693 
20694             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20695             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20696             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20697          }
20698          {
20699             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20700             using T2 = UniformMatrix<double,columnMajor>;
20701             using RT = DynamicMatrix<double,columnMajor>;
20702             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20703 
20704             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20705             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20706             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20707          }
20708       }
20709 
20710       // .../InitializerMatrix
20711       {
20712          {
20713             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20714             using T2 = InitializerMatrix<double>;
20715             using RT = DynamicMatrix<double,rowMajor>;
20716             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20717 
20718             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20719             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20720             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20721          }
20722          {
20723             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20724             using T2 = InitializerMatrix<double>;
20725             using RT = DynamicMatrix<double,rowMajor>;
20726             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20727 
20728             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20729             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20730             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20731          }
20732       }
20733 
20734       // .../CompressedMatrix
20735       {
20736          {
20737             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20738             using T2 = CompressedMatrix<double,rowMajor>;
20739             using RT = DynamicMatrix<double,rowMajor>;
20740             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20741 
20742             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20743             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20744             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20745          }
20746          {
20747             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20748             using T2 = CompressedMatrix<double,columnMajor>;
20749             using RT = DynamicMatrix<double,rowMajor>;
20750             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20751 
20752             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20753             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20754             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20755          }
20756          {
20757             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20758             using T2 = CompressedMatrix<double,rowMajor>;
20759             using RT = DynamicMatrix<double,columnMajor>;
20760             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20761 
20762             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20763             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20764             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20765          }
20766          {
20767             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20768             using T2 = CompressedMatrix<double,columnMajor>;
20769             using RT = DynamicMatrix<double,columnMajor>;
20770             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20771 
20772             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20773             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20774             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20775          }
20776       }
20777 
20778       // .../IdentityMatrix
20779       {
20780          {
20781             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20782             using T2 = IdentityMatrix<double,rowMajor>;
20783             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
20784             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20785 
20786             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20787             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20788             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20789          }
20790          {
20791             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20792             using T2 = IdentityMatrix<double,columnMajor>;
20793             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
20794             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20795 
20796             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20797             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20798             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20799          }
20800          {
20801             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20802             using T2 = IdentityMatrix<double,rowMajor>;
20803             using RT = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
20804             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20805 
20806             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20807             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20808             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20809          }
20810          {
20811             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20812             using T2 = IdentityMatrix<double,columnMajor>;
20813             using RT = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
20814             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20815 
20816             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20817             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20818             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20819          }
20820       }
20821 
20822       // .../ZeroMatrix
20823       {
20824          {
20825             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20826             using T2 = ZeroMatrix<double,rowMajor>;
20827             using RT = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
20828             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20829 
20830             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20831             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20832             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20833          }
20834          {
20835             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20836             using T2 = ZeroMatrix<double,columnMajor>;
20837             using RT = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
20838             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20839 
20840             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20841             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20842             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20843          }
20844          {
20845             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20846             using T2 = ZeroMatrix<double,rowMajor>;
20847             using RT = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
20848             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20849 
20850             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20851             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20852             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20853          }
20854          {
20855             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20856             using T2 = ZeroMatrix<double,columnMajor>;
20857             using RT = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
20858             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20859 
20860             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20861             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20862             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20863          }
20864       }
20865 
20866       // .../SymmetricMatrix<DynamicMatrix> (real)
20867       {
20868          {
20869             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20870             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
20871             using RT = DynamicMatrix<double,rowMajor>;
20872             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20873 
20874             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20875             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20876             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20877          }
20878          {
20879             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20880             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
20881             using RT = DynamicMatrix<double,rowMajor>;
20882             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20883 
20884             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20885             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20886             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20887          }
20888          {
20889             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20890             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
20891             using RT = DynamicMatrix<double,columnMajor>;
20892             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20893 
20894             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20895             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20896             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20897          }
20898          {
20899             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20900             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
20901             using RT = DynamicMatrix<double,columnMajor>;
20902             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20903 
20904             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20905             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20906             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20907          }
20908       }
20909 
20910       // .../SymmetricMatrix<DynamicMatrix> (complex)
20911       {
20912          {
20913             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20914             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
20915             using RT = DynamicMatrix<complex<int>,rowMajor>;
20916             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20917 
20918             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20919             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20920             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20921          }
20922          {
20923             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20924             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
20925             using RT = DynamicMatrix<complex<int>,rowMajor>;
20926             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20927 
20928             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20929             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20930             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20931          }
20932          {
20933             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20934             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
20935             using RT = DynamicMatrix<complex<int>,columnMajor>;
20936             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20937 
20938             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20939             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20940             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20941          }
20942          {
20943             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20944             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
20945             using RT = DynamicMatrix<complex<int>,columnMajor>;
20946             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20947 
20948             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20949             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20950             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20951          }
20952       }
20953 
20954       // .../SymmetricMatrix<UniformMatrix>
20955       {
20956          {
20957             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20958             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
20959             using RT = DynamicMatrix<double,rowMajor>;
20960             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20961 
20962             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20963             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20964             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20965          }
20966          {
20967             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
20968             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
20969             using RT = DynamicMatrix<double,rowMajor>;
20970             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20971 
20972             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20973             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20974             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20975          }
20976          {
20977             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20978             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
20979             using RT = DynamicMatrix<double,columnMajor>;
20980             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20981 
20982             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20983             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20984             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20985          }
20986          {
20987             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
20988             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
20989             using RT = DynamicMatrix<double,columnMajor>;
20990             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
20991 
20992             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
20993             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
20994             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
20995          }
20996       }
20997 
20998       // .../SymmetricMatrix<ZeroMatrix>
20999       {
21000          {
21001             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21002             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
21003             using RT = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
21004             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21005 
21006             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21007             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21008             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21009          }
21010          {
21011             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21012             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
21013             using RT = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
21014             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21015 
21016             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21017             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21018             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21019          }
21020          {
21021             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21022             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
21023             using RT = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
21024             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21025 
21026             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21027             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21028             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21029          }
21030          {
21031             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21032             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
21033             using RT = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
21034             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21035 
21036             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21037             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21038             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21039          }
21040       }
21041 
21042       // .../HermitianMatrix<DynamicMatrix> (symmetric)
21043       {
21044          {
21045             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21046             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
21047             using RT = DynamicMatrix<double,rowMajor>;
21048             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21049 
21050             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21051             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21052             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21053          }
21054          {
21055             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21056             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
21057             using RT = DynamicMatrix<double,rowMajor>;
21058             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21059 
21060             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21061             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21062             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21063          }
21064          {
21065             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21066             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
21067             using RT = DynamicMatrix<double,columnMajor>;
21068             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21069 
21070             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21071             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21072             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21073          }
21074          {
21075             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21076             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
21077             using RT = DynamicMatrix<double,columnMajor>;
21078             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21079 
21080             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21081             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21082             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21083          }
21084       }
21085 
21086       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
21087       {
21088          {
21089             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21090             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
21091             using RT = DynamicMatrix<complex<int>,rowMajor>;
21092             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21093 
21094             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21095             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21096             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21097          }
21098          {
21099             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21100             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
21101             using RT = DynamicMatrix<complex<int>,rowMajor>;
21102             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21103 
21104             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21105             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21106             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21107          }
21108          {
21109             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21110             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
21111             using RT = DynamicMatrix<complex<int>,rowMajor>;
21112             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21113 
21114             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21115             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21116             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21117          }
21118          {
21119             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21120             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
21121             using RT = DynamicMatrix<complex<int>,columnMajor>;
21122             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21123 
21124             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21125             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21126             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21127          }
21128       }
21129 
21130       // .../LowerMatrix<DynamicMatrix>
21131       {
21132          {
21133             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21134             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
21135             using RT = DynamicMatrix<double,rowMajor>;
21136             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21137 
21138             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21139             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21140             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21141          }
21142          {
21143             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21144             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
21145             using RT = DynamicMatrix<double,rowMajor>;
21146             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21147 
21148             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21149             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21150             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21151          }
21152          {
21153             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21154             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
21155             using RT = DynamicMatrix<double,rowMajor>;
21156             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21157 
21158             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21159             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21160             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21161          }
21162          {
21163             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21164             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
21165             using RT = DynamicMatrix<double,columnMajor>;
21166             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21167 
21168             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21169             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21170             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21171          }
21172       }
21173 
21174       // .../UniLowerMatrix<DynamicMatrix>
21175       {
21176          {
21177             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21178             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
21179             using RT = DynamicMatrix<double,rowMajor>;
21180             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21181 
21182             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21183             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21184             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21185          }
21186          {
21187             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21188             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
21189             using RT = DynamicMatrix<double,rowMajor>;
21190             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21191 
21192             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21193             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21194             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21195          }
21196          {
21197             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21198             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
21199             using RT = DynamicMatrix<double,rowMajor>;
21200             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21201 
21202             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21203             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21204             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21205          }
21206          {
21207             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21208             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
21209             using RT = DynamicMatrix<double,columnMajor>;
21210             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21211 
21212             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21213             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21214             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21215          }
21216       }
21217 
21218       // .../StrictlyLowerMatrix<DynamicMatrix>
21219       {
21220          {
21221             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21222             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
21223             using RT = DynamicMatrix<double,rowMajor>;
21224             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21225 
21226             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21227             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21228             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21229          }
21230          {
21231             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21232             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
21233             using RT = DynamicMatrix<double,rowMajor>;
21234             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21235 
21236             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21237             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21238             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21239          }
21240          {
21241             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21242             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
21243             using RT = DynamicMatrix<double,rowMajor>;
21244             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21245 
21246             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21247             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21248             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21249          }
21250          {
21251             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21252             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
21253             using RT = DynamicMatrix<double,columnMajor>;
21254             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21255 
21256             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21257             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21258             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21259          }
21260       }
21261 
21262       // .../UpperMatrix<DynamicMatrix>
21263       {
21264          {
21265             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21266             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
21267             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
21268             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21269 
21270             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21271             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21272             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21273          }
21274          {
21275             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21276             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
21277             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
21278             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21279 
21280             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21281             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21282             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21283          }
21284          {
21285             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21286             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
21287             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
21288             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21289 
21290             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21291             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21292             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21293          }
21294          {
21295             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21296             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
21297             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
21298             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21299 
21300             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21301             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21302             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21303          }
21304       }
21305 
21306       // .../UniUpperMatrix<DynamicMatrix>
21307       {
21308          {
21309             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21310             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
21311             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
21312             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21313 
21314             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21315             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21316             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21317          }
21318          {
21319             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21320             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
21321             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
21322             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21323 
21324             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21325             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21326             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21327          }
21328          {
21329             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21330             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
21331             using RT = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
21332             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21333 
21334             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21335             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21336             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21337          }
21338          {
21339             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21340             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
21341             using RT = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
21342             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21343 
21344             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21345             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21346             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21347          }
21348       }
21349 
21350       // .../StrictlyUpperMatrix<DynamicMatrix>
21351       {
21352          {
21353             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21354             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
21355             using RT = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
21356             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21357 
21358             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21359             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21360             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21361          }
21362          {
21363             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21364             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
21365             using RT = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
21366             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21367 
21368             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21369             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21370             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21371          }
21372          {
21373             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21374             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
21375             using RT = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
21376             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21377 
21378             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21379             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21380             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21381          }
21382          {
21383             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21384             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
21385             using RT = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
21386             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21387 
21388             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21389             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21390             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21391          }
21392       }
21393 
21394       // .../DiagonalMatrix<DynamicMatrix>
21395       {
21396          {
21397             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21398             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
21399             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
21400             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21401 
21402             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21403             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21404             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21405          }
21406          {
21407             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
21408             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
21409             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
21410             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21411 
21412             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21413             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21414             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21415          }
21416          {
21417             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21418             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
21419             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
21420             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21421 
21422             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21423             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21424             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21425          }
21426          {
21427             using T1 = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
21428             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
21429             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
21430             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21431 
21432             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21433             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21434             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21435          }
21436       }
21437    }
21438 
21439    // DiagonalMatrix<DynamicMatrix>/...
21440    {
21441       // .../StaticMatrix
21442       {
21443          {
21444             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21445             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
21446             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
21447             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21448 
21449             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21450             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21451             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21452          }
21453          {
21454             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21455             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
21456             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
21457             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21458 
21459             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21460             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21461             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21462          }
21463          {
21464             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21465             using T2 = StaticMatrix<double,3UL,3UL,rowMajor>;
21466             using RT = StaticMatrix<double,3UL,3UL,rowMajor>;
21467             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21468 
21469             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21470             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21471             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21472          }
21473          {
21474             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21475             using T2 = StaticMatrix<double,3UL,3UL,columnMajor>;
21476             using RT = StaticMatrix<double,3UL,3UL,columnMajor>;
21477             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21478 
21479             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21480             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21481             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21482          }
21483       }
21484 
21485       // .../HybridMatrix
21486       {
21487          {
21488             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21489             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
21490             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
21491             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21492 
21493             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21494             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21495             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21496          }
21497          {
21498             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21499             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
21500             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
21501             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21502 
21503             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21504             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21505             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21506          }
21507          {
21508             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21509             using T2 = HybridMatrix<double,8UL,6UL,rowMajor>;
21510             using RT = HybridMatrix<double,8UL,6UL,rowMajor>;
21511             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21512 
21513             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21514             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21515             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21516          }
21517          {
21518             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21519             using T2 = HybridMatrix<double,8UL,6UL,columnMajor>;
21520             using RT = HybridMatrix<double,8UL,6UL,columnMajor>;
21521             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21522 
21523             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21524             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21525             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21526          }
21527       }
21528 
21529       // .../DynamicMatrix
21530       {
21531          {
21532             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21533             using T2 = DynamicMatrix<double,rowMajor>;
21534             using RT = DynamicMatrix<double,rowMajor>;
21535             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21536 
21537             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21538             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21539             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21540          }
21541          {
21542             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21543             using T2 = DynamicMatrix<double,columnMajor>;
21544             using RT = DynamicMatrix<double,columnMajor>;
21545             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21546 
21547             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21548             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21549             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21550          }
21551          {
21552             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21553             using T2 = DynamicMatrix<double,rowMajor>;
21554             using RT = DynamicMatrix<double,rowMajor>;
21555             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21556 
21557             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21558             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21559             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21560          }
21561          {
21562             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21563             using T2 = DynamicMatrix<double,columnMajor>;
21564             using RT = DynamicMatrix<double,columnMajor>;
21565             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21566 
21567             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21568             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21569             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21570          }
21571       }
21572 
21573       // .../CustomMatrix
21574       {
21575          {
21576             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21577             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
21578             using RT = DynamicMatrix<double,rowMajor>;
21579             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21580 
21581             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21582             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21583             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21584          }
21585          {
21586             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21587             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
21588             using RT = DynamicMatrix<double,columnMajor>;
21589             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21590 
21591             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21592             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21593             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21594          }
21595          {
21596             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21597             using T2 = CustomMatrix<double,unaligned,unpadded,rowMajor>;
21598             using RT = DynamicMatrix<double,rowMajor>;
21599             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21600 
21601             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21602             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21603             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21604          }
21605          {
21606             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21607             using T2 = CustomMatrix<double,unaligned,unpadded,columnMajor>;
21608             using RT = DynamicMatrix<double,columnMajor>;
21609             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21610 
21611             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21612             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21613             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21614          }
21615       }
21616 
21617       // .../UniformMatrix
21618       {
21619          {
21620             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21621             using T2 = UniformMatrix<double,rowMajor>;
21622             using RT = DynamicMatrix<double,rowMajor>;
21623             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21624 
21625             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21626             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21627             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21628          }
21629          {
21630             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21631             using T2 = UniformMatrix<double,columnMajor>;
21632             using RT = DynamicMatrix<double,columnMajor>;
21633             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21634 
21635             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21636             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21637             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21638          }
21639          {
21640             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21641             using T2 = UniformMatrix<double,rowMajor>;
21642             using RT = DynamicMatrix<double,rowMajor>;
21643             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21644 
21645             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21646             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21647             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21648          }
21649          {
21650             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21651             using T2 = UniformMatrix<double,columnMajor>;
21652             using RT = DynamicMatrix<double,columnMajor>;
21653             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21654 
21655             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21656             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21657             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21658          }
21659       }
21660 
21661       // .../InitializerMatrix
21662       {
21663          {
21664             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21665             using T2 = InitializerMatrix<double>;
21666             using RT = DynamicMatrix<double,rowMajor>;
21667             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21668 
21669             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21670             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21671             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21672          }
21673          {
21674             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21675             using T2 = InitializerMatrix<double>;
21676             using RT = DynamicMatrix<double,rowMajor>;
21677             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21678 
21679             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21680             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21681             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21682          }
21683       }
21684 
21685       // .../CompressedMatrix
21686       {
21687          {
21688             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21689             using T2 = CompressedMatrix<double,rowMajor>;
21690             using RT = DynamicMatrix<double,rowMajor>;
21691             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21692 
21693             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21694             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21695             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21696          }
21697          {
21698             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21699             using T2 = CompressedMatrix<double,columnMajor>;
21700             using RT = DynamicMatrix<double,rowMajor>;
21701             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21702 
21703             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21704             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21705             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21706          }
21707          {
21708             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21709             using T2 = CompressedMatrix<double,rowMajor>;
21710             using RT = DynamicMatrix<double,columnMajor>;
21711             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21712 
21713             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21714             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21715             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21716          }
21717          {
21718             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21719             using T2 = CompressedMatrix<double,columnMajor>;
21720             using RT = DynamicMatrix<double,columnMajor>;
21721             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21722 
21723             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21724             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21725             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21726          }
21727       }
21728 
21729       // .../IdentityMatrix
21730       {
21731          {
21732             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21733             using T2 = IdentityMatrix<double,rowMajor>;
21734             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
21735             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21736 
21737             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21738             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21739             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21740          }
21741          {
21742             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21743             using T2 = IdentityMatrix<double,columnMajor>;
21744             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
21745             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21746 
21747             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21748             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21749             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21750          }
21751          {
21752             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21753             using T2 = IdentityMatrix<double,rowMajor>;
21754             using RT = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
21755             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21756 
21757             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21758             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21759             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21760          }
21761          {
21762             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21763             using T2 = IdentityMatrix<double,columnMajor>;
21764             using RT = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
21765             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21766 
21767             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21768             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21769             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21770          }
21771       }
21772 
21773       // .../ZeroMatrix
21774       {
21775          {
21776             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21777             using T2 = ZeroMatrix<double,rowMajor>;
21778             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
21779             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21780 
21781             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21782             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21783             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21784          }
21785          {
21786             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21787             using T2 = ZeroMatrix<double,columnMajor>;
21788             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
21789             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21790 
21791             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21792             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21793             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21794          }
21795          {
21796             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21797             using T2 = ZeroMatrix<double,rowMajor>;
21798             using RT = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
21799             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21800 
21801             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21802             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21803             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21804          }
21805          {
21806             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21807             using T2 = ZeroMatrix<double,columnMajor>;
21808             using RT = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
21809             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21810 
21811             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21812             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21813             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21814          }
21815       }
21816 
21817       // .../SymmetricMatrix<DynamicMatrix> (real)
21818       {
21819          {
21820             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21821             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
21822             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
21823             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21824 
21825             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21826             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21827             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21828          }
21829          {
21830             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21831             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
21832             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
21833             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21834 
21835             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21836             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21837             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21838          }
21839          {
21840             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21841             using T2 = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
21842             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
21843             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21844 
21845             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21846             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21847             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21848          }
21849          {
21850             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21851             using T2 = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
21852             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
21853             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21854 
21855             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21856             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21857             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21858          }
21859       }
21860 
21861       // .../SymmetricMatrix<DynamicMatrix> (complex)
21862       {
21863          {
21864             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21865             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
21866             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
21867             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21868 
21869             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21870             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21871             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21872          }
21873          {
21874             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21875             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
21876             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
21877             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21878 
21879             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21880             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21881             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21882          }
21883          {
21884             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21885             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
21886             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
21887             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21888 
21889             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21890             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21891             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21892          }
21893          {
21894             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21895             using T2 = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
21896             using RT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
21897             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21898 
21899             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21900             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21901             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21902          }
21903       }
21904 
21905       // .../SymmetricMatrix<UniformMatrix>
21906       {
21907          {
21908             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21909             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
21910             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
21911             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21912 
21913             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21914             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21915             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21916          }
21917          {
21918             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21919             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
21920             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
21921             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21922 
21923             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21924             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21925             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21926          }
21927          {
21928             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21929             using T2 = SymmetricMatrix< UniformMatrix<double,rowMajor> >;
21930             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
21931             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21932 
21933             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21934             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21935             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21936          }
21937          {
21938             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21939             using T2 = SymmetricMatrix< UniformMatrix<double,columnMajor> >;
21940             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
21941             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21942 
21943             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21944             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21945             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21946          }
21947       }
21948 
21949       // .../SymmetricMatrix<ZeroMatrix>
21950       {
21951          {
21952             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21953             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
21954             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
21955             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21956 
21957             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21958             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21959             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21960          }
21961          {
21962             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21963             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
21964             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
21965             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21966 
21967             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21968             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21969             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21970          }
21971          {
21972             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21973             using T2 = SymmetricMatrix< ZeroMatrix<double,rowMajor> >;
21974             using RT = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
21975             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21976 
21977             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21978             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21979             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21980          }
21981          {
21982             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
21983             using T2 = SymmetricMatrix< ZeroMatrix<double,columnMajor> >;
21984             using RT = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
21985             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
21986 
21987             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
21988             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
21989             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
21990          }
21991       }
21992 
21993       // .../HermitianMatrix<DynamicMatrix> (symmetric)
21994       {
21995          {
21996             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
21997             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
21998             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
21999             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22000 
22001             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22002             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22003             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22004          }
22005          {
22006             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22007             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
22008             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
22009             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22010 
22011             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22012             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22013             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22014          }
22015          {
22016             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22017             using T2 = HermitianMatrix< DynamicMatrix<double,rowMajor> >;
22018             using RT = SymmetricMatrix< DynamicMatrix<double,rowMajor> >;
22019             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22020 
22021             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22022             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22023             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22024          }
22025          {
22026             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22027             using T2 = HermitianMatrix< DynamicMatrix<double,columnMajor> >;
22028             using RT = SymmetricMatrix< DynamicMatrix<double,columnMajor> >;
22029             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22030 
22031             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22032             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22033             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22034          }
22035       }
22036 
22037       // .../HermitianMatrix<DynamicMatrix> (Hermitian)
22038       {
22039          {
22040             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22041             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
22042             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
22043             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22044 
22045             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22046             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22047             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22048          }
22049          {
22050             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22051             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
22052             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
22053             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22054 
22055             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22056             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22057             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22058          }
22059          {
22060             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22061             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
22062             using RT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
22063             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22064 
22065             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22066             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22067             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22068          }
22069          {
22070             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22071             using T2 = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
22072             using RT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
22073             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22074 
22075             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22076             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22077             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22078          }
22079       }
22080 
22081       // .../LowerMatrix<DynamicMatrix>
22082       {
22083          {
22084             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22085             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
22086             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
22087             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22088 
22089             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22090             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22091             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22092          }
22093          {
22094             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22095             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
22096             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
22097             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22098 
22099             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22100             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22101             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22102          }
22103          {
22104             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22105             using T2 = LowerMatrix< DynamicMatrix<double,rowMajor> >;
22106             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
22107             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22108 
22109             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22110             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22111             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22112          }
22113          {
22114             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22115             using T2 = LowerMatrix< DynamicMatrix<double,columnMajor> >;
22116             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
22117             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22118 
22119             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22120             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22121             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22122          }
22123       }
22124 
22125       // .../UniLowerMatrix<DynamicMatrix>
22126       {
22127          {
22128             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22129             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
22130             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
22131             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22132 
22133             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22134             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22135             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22136          }
22137          {
22138             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22139             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
22140             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
22141             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22142 
22143             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22144             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22145             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22146          }
22147          {
22148             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22149             using T2 = UniLowerMatrix< DynamicMatrix<double,rowMajor> >;
22150             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
22151             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22152 
22153             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22154             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22155             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22156          }
22157          {
22158             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22159             using T2 = UniLowerMatrix< DynamicMatrix<double,columnMajor> >;
22160             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
22161             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22162 
22163             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22164             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22165             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22166          }
22167       }
22168 
22169       // .../StrictlyLowerMatrix<DynamicMatrix>
22170       {
22171          {
22172             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22173             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
22174             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
22175             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22176 
22177             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22178             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22179             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22180          }
22181          {
22182             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22183             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
22184             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
22185             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22186 
22187             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22188             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22189             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22190          }
22191          {
22192             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22193             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,rowMajor> >;
22194             using RT = LowerMatrix< DynamicMatrix<double,rowMajor> >;
22195             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22196 
22197             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22198             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22199             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22200          }
22201          {
22202             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22203             using T2 = StrictlyLowerMatrix< DynamicMatrix<double,columnMajor> >;
22204             using RT = LowerMatrix< DynamicMatrix<double,columnMajor> >;
22205             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22206 
22207             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22208             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22209             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22210          }
22211       }
22212 
22213       // .../UpperMatrix<DynamicMatrix>
22214       {
22215          {
22216             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22217             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
22218             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
22219             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22220 
22221             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22222             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22223             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22224          }
22225          {
22226             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22227             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
22228             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
22229             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22230 
22231             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22232             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22233             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22234          }
22235          {
22236             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22237             using T2 = UpperMatrix< DynamicMatrix<double,rowMajor> >;
22238             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
22239             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22240 
22241             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22242             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22243             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22244          }
22245          {
22246             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22247             using T2 = UpperMatrix< DynamicMatrix<double,columnMajor> >;
22248             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
22249             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22250 
22251             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22252             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22253             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22254          }
22255       }
22256 
22257       // .../UniUpperMatrix<DynamicMatrix>
22258       {
22259          {
22260             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22261             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
22262             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
22263             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22264 
22265             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22266             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22267             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22268          }
22269          {
22270             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22271             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
22272             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
22273             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22274 
22275             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22276             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22277             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22278          }
22279          {
22280             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22281             using T2 = UniUpperMatrix< DynamicMatrix<double,rowMajor> >;
22282             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
22283             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22284 
22285             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22286             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22287             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22288          }
22289          {
22290             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22291             using T2 = UniUpperMatrix< DynamicMatrix<double,columnMajor> >;
22292             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
22293             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22294 
22295             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22296             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22297             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22298          }
22299       }
22300 
22301       // .../StrictlyUpperMatrix<DynamicMatrix>
22302       {
22303          {
22304             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22305             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
22306             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
22307             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22308 
22309             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22310             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22311             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22312          }
22313          {
22314             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22315             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
22316             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
22317             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22318 
22319             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22320             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22321             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22322          }
22323          {
22324             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22325             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,rowMajor> >;
22326             using RT = UpperMatrix< DynamicMatrix<double,rowMajor> >;
22327             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22328 
22329             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22330             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22331             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22332          }
22333          {
22334             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22335             using T2 = StrictlyUpperMatrix< DynamicMatrix<double,columnMajor> >;
22336             using RT = UpperMatrix< DynamicMatrix<double,columnMajor> >;
22337             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22338 
22339             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22340             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22341             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22342          }
22343       }
22344 
22345       // .../DiagonalMatrix<DynamicMatrix>
22346       {
22347          {
22348             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22349             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
22350             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
22351             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22352 
22353             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22354             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22355             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22356          }
22357          {
22358             using T1 = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
22359             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
22360             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
22361             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22362 
22363             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22364             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22365             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22366          }
22367          {
22368             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22369             using T2 = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
22370             using RT = DiagonalMatrix< DynamicMatrix<double,rowMajor> >;
22371             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22372 
22373             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22374             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22375             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22376          }
22377          {
22378             using T1 = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
22379             using T2 = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
22380             using RT = DiagonalMatrix< DynamicMatrix<double,columnMajor> >;
22381             static_assert( IsSame_v< AddTrait_t<T1,T2>, RT >, "Non-matching type detected" );
22382 
22383             using Expr = RemoveCVRef_t< decltype( std::declval<T1>() + std::declval<T2>() ) >;
22384             static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
22385             static_assert( StorageOrder_v<Expr> == StorageOrder_v<RT>, "Non-matching storage order detected" );
22386          }
22387       }
22388    }
22389 }
22390 //*************************************************************************************************
22391 
22392 } // namespace addtrait
22393 
22394 } // namespace traits
22395 
22396 } // namespace mathtest
22397 
22398 } // namespace blazetest
22399 
22400 
22401 
22402 
22403 //=================================================================================================
22404 //
22405 //  MAIN FUNCTION
22406 //
22407 //=================================================================================================
22408 
22409 //*************************************************************************************************
main()22410 int main()
22411 {
22412    std::cout << "   Running AddTrait class test..." << std::endl;
22413 
22414    try
22415    {
22416       RUN_ADDTRAIT_CLASS_TEST;
22417    }
22418    catch( std::exception& ex ) {
22419       std::cerr << "\n\n ERROR DETECTED during AddTrait class test:\n"
22420                 << ex.what() << "\n";
22421       return EXIT_FAILURE;
22422    }
22423 
22424    return EXIT_SUCCESS;
22425 }
22426 //*************************************************************************************************
22427