34
34
#ifndef TAO_OPERATORS_NO_RVALUE_REFERENCE_RESULTS
35
35
#define TAO_OPERATORS_BASIC_OP ( name, op ) \
36
36
template < typename T, typename U = T > \
37
- class name /* NOLINT */ \
37
+ class TAO_OPERATORS_BROKEN_EBO name /* NOLINT */ \
38
38
{ \
39
39
friend T operator op ( const T& lhs, const U& rhs ) noexcept ( noexcept ( T( lhs ), std::declval< T& >() op## = rhs, T( std::declval< T& >() ) ) ) \
40
40
{ \
65
65
#else
66
66
#define TAO_OPERATORS_BASIC_OP ( name, op ) \
67
67
template < typename T, typename U = T > \
68
- class name \
68
+ class TAO_OPERATORS_BROKEN_EBO name \
69
69
{ \
70
70
TAO_OPERATORS_NODISCARD friend T operator op ( const T& lhs, const U& rhs ) noexcept ( noexcept ( T( lhs ), std::declval< T& >() op## = rhs, T( std::declval< T& >() ) ) ) \
71
71
{ \
99
99
100
100
#define TAO_OPERATORS_BASIC_OP_LEFT ( name, op ) \
101
101
template < typename T, typename U > \
102
- class name ##_left \
102
+ class TAO_OPERATORS_BROKEN_EBO name##_left \
103
103
{ \
104
104
TAO_OPERATORS_NODISCARD friend T operator op ( const U& lhs, const T& rhs ) noexcept ( noexcept ( T( lhs ), std::declval< T& >() op## = rhs, T( std::declval< T& >() ) ) ) \
105
105
{ \
133
133
#ifndef TAO_OPERATORS_NO_RVALUE_REFERENCE_RESULTS
134
134
#define TAO_OPERATORS_BASIC_OP_COMMUTATIVE ( name, op ) \
135
135
template < typename T, typename U = T > \
136
- class commutative_ ##name \
136
+ class TAO_OPERATORS_BROKEN_EBO commutative_##name \
137
137
{ \
138
138
TAO_OPERATORS_NODISCARD friend T operator op ( const T& lhs, const U& rhs ) noexcept ( noexcept ( T( lhs ), std::declval< T& >() op## = rhs, T( std::declval< T& >() ) ) ) \
139
139
{ \
189
189
}; \
190
190
\
191
191
template < typename T > \
192
- class commutative_ ##name< T > \
192
+ class TAO_OPERATORS_BROKEN_EBO commutative_##name< T > \
193
193
{ \
194
194
TAO_OPERATORS_NODISCARD friend T operator op ( const T& lhs, const T& rhs ) noexcept ( noexcept ( T( lhs ), std::declval< T& >() op## = rhs, T( std::declval< T& >() ) ) ) \
195
195
{ \
219
219
#else
220
220
#define TAO_OPERATORS_BASIC_OP_COMMUTATIVE ( name, op ) \
221
221
template < typename T, typename U = T > \
222
- class commutative_ ##name \
222
+ class TAO_OPERATORS_BROKEN_EBO commutative_##name \
223
223
{ \
224
224
TAO_OPERATORS_NODISCARD friend T operator op ( const T& lhs, const U& rhs ) noexcept ( noexcept ( T( lhs ), std::declval< T& >() op## = rhs, T( std::declval< T& >() ) ) ) \
225
225
{ \
279
279
}; \
280
280
\
281
281
template < typename T > \
282
- class commutative_ ##name< T > \
282
+ class TAO_OPERATORS_BROKEN_EBO commutative_##name< T > \
283
283
{ \
284
284
TAO_OPERATORS_NODISCARD friend T operator op ( const T& lhs, const T& rhs ) noexcept ( noexcept ( T( lhs ), std::declval< T& >() op## = rhs, T( std::declval< T& >() ) ) ) \
285
285
{ \
@@ -316,7 +316,7 @@ namespace tao
316
316
namespace operators
317
317
{
318
318
template < typename T, typename U = T >
319
- class equality_comparable
319
+ class TAO_OPERATORS_BROKEN_EBO equality_comparable
320
320
{
321
321
TAO_OPERATORS_NODISCARD friend TAO_OPERATORS_CONSTEXPR bool operator !=( const T& lhs, const U& rhs ) noexcept ( noexcept ( static_cast < bool >( lhs == rhs ) ) )
322
322
{
@@ -335,7 +335,7 @@ namespace tao
335
335
};
336
336
337
337
template < typename T >
338
- class equality_comparable < T >
338
+ class TAO_OPERATORS_BROKEN_EBO equality_comparable< T >
339
339
{
340
340
TAO_OPERATORS_NODISCARD friend TAO_OPERATORS_CONSTEXPR bool operator !=( const T& lhs, const T& rhs ) noexcept ( noexcept ( static_cast < bool >( lhs == rhs ) ) )
341
341
{
@@ -344,7 +344,7 @@ namespace tao
344
344
};
345
345
346
346
template < typename T, typename U = T >
347
- class less_than_comparable
347
+ class TAO_OPERATORS_BROKEN_EBO less_than_comparable
348
348
{
349
349
TAO_OPERATORS_NODISCARD friend TAO_OPERATORS_CONSTEXPR bool operator <=( const T& lhs, const U& rhs ) noexcept ( noexcept ( static_cast < bool >( lhs > rhs ) ) )
350
350
{
@@ -378,7 +378,7 @@ namespace tao
378
378
};
379
379
380
380
template < typename T >
381
- class less_than_comparable < T >
381
+ class TAO_OPERATORS_BROKEN_EBO less_than_comparable< T >
382
382
{
383
383
TAO_OPERATORS_NODISCARD friend TAO_OPERATORS_CONSTEXPR bool operator >( const T& lhs, const T& rhs ) noexcept ( noexcept ( static_cast < bool >( rhs < lhs ) ) )
384
384
{
@@ -404,7 +404,7 @@ namespace tao
404
404
};
405
405
406
406
template < typename T, typename U = T >
407
- class equivalent
407
+ class TAO_OPERATORS_BROKEN_EBO equivalent
408
408
{
409
409
TAO_OPERATORS_NODISCARD friend TAO_OPERATORS_CONSTEXPR bool operator ==( const T& lhs, const U& rhs ) noexcept ( noexcept ( static_cast < bool >( lhs < rhs ), static_cast < bool >( lhs > rhs ) ) )
410
410
{
@@ -413,7 +413,7 @@ namespace tao
413
413
};
414
414
415
415
template < typename T >
416
- class equivalent < T >
416
+ class TAO_OPERATORS_BROKEN_EBO equivalent< T >
417
417
{
418
418
TAO_OPERATORS_NODISCARD friend TAO_OPERATORS_CONSTEXPR bool operator ==( const T& lhs, const T& rhs ) noexcept ( noexcept ( static_cast < bool >( lhs < rhs ) ) )
419
419
{
@@ -422,7 +422,7 @@ namespace tao
422
422
};
423
423
424
424
template < typename T, typename U = T >
425
- class partially_ordered
425
+ class TAO_OPERATORS_BROKEN_EBO partially_ordered
426
426
{
427
427
TAO_OPERATORS_NODISCARD friend TAO_OPERATORS_CONSTEXPR bool operator <=( const T& lhs, const U& rhs ) noexcept ( noexcept ( static_cast < bool >( lhs < rhs ), static_cast < bool >( lhs == rhs ) ) )
428
428
{
@@ -456,7 +456,7 @@ namespace tao
456
456
};
457
457
458
458
template < typename T >
459
- class partially_ordered < T >
459
+ class TAO_OPERATORS_BROKEN_EBO partially_ordered< T >
460
460
{
461
461
TAO_OPERATORS_NODISCARD friend TAO_OPERATORS_CONSTEXPR bool operator >( const T& lhs, const T& rhs ) noexcept ( noexcept ( static_cast < bool >( rhs < lhs ) ) )
462
462
{
@@ -608,7 +608,7 @@ namespace tao
608
608
};
609
609
610
610
template < typename T >
611
- class incrementable
611
+ class TAO_OPERATORS_BROKEN_EBO incrementable
612
612
{
613
613
TAO_OPERATORS_NODISCARD friend T operator ++( T& arg, int /* unused*/ ) noexcept ( noexcept ( T( arg ), ++arg, T( std::declval< T >() ) ) ) // NOLINT
614
614
{
@@ -619,7 +619,7 @@ namespace tao
619
619
};
620
620
621
621
template < typename T >
622
- class decrementable
622
+ class TAO_OPERATORS_BROKEN_EBO decrementable
623
623
{
624
624
TAO_OPERATORS_NODISCARD friend T operator --( T& arg, int /* unused*/ ) noexcept ( noexcept ( T( arg ), --arg, T( std::declval< T >() ) ) ) // NOLINT
625
625
{
0 commit comments