3434#ifndef TAO_OPERATORS_NO_RVALUE_REFERENCE_RESULTS
3535#define TAO_OPERATORS_BASIC_OP ( name, op ) \
3636 template < typename T, typename U = T > \
37- class name /* NOLINT */ \
37+ class TAO_OPERATORS_BROKEN_EBO name /* NOLINT */ \
3838 { \
3939 friend T operator op ( const T& lhs, const U& rhs ) noexcept ( noexcept ( T( lhs ), std::declval< T& >() op## = rhs, T( std::declval< T& >() ) ) ) \
4040 { \
6565#else
6666#define TAO_OPERATORS_BASIC_OP ( name, op ) \
6767 template < typename T, typename U = T > \
68- class name \
68+ class TAO_OPERATORS_BROKEN_EBO name \
6969 { \
7070 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& >() ) ) ) \
7171 { \
9999
100100#define TAO_OPERATORS_BASIC_OP_LEFT ( name, op ) \
101101 template < typename T, typename U > \
102- class name ##_left \
102+ class TAO_OPERATORS_BROKEN_EBO name##_left \
103103 { \
104104 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& >() ) ) ) \
105105 { \
133133#ifndef TAO_OPERATORS_NO_RVALUE_REFERENCE_RESULTS
134134#define TAO_OPERATORS_BASIC_OP_COMMUTATIVE ( name, op ) \
135135 template < typename T, typename U = T > \
136- class commutative_ ##name \
136+ class TAO_OPERATORS_BROKEN_EBO commutative_##name \
137137 { \
138138 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& >() ) ) ) \
139139 { \
189189 }; \
190190 \
191191 template < typename T > \
192- class commutative_ ##name< T > \
192+ class TAO_OPERATORS_BROKEN_EBO commutative_##name< T > \
193193 { \
194194 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& >() ) ) ) \
195195 { \
219219#else
220220#define TAO_OPERATORS_BASIC_OP_COMMUTATIVE ( name, op ) \
221221 template < typename T, typename U = T > \
222- class commutative_ ##name \
222+ class TAO_OPERATORS_BROKEN_EBO commutative_##name \
223223 { \
224224 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& >() ) ) ) \
225225 { \
279279 }; \
280280 \
281281 template < typename T > \
282- class commutative_ ##name< T > \
282+ class TAO_OPERATORS_BROKEN_EBO commutative_##name< T > \
283283 { \
284284 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& >() ) ) ) \
285285 { \
@@ -316,7 +316,7 @@ namespace tao
316316 namespace operators
317317 {
318318 template < typename T, typename U = T >
319- class equality_comparable
319+ class TAO_OPERATORS_BROKEN_EBO equality_comparable
320320 {
321321 TAO_OPERATORS_NODISCARD friend TAO_OPERATORS_CONSTEXPR bool operator !=( const T& lhs, const U& rhs ) noexcept ( noexcept ( static_cast < bool >( lhs == rhs ) ) )
322322 {
@@ -335,7 +335,7 @@ namespace tao
335335 };
336336
337337 template < typename T >
338- class equality_comparable < T >
338+ class TAO_OPERATORS_BROKEN_EBO equality_comparable< T >
339339 {
340340 TAO_OPERATORS_NODISCARD friend TAO_OPERATORS_CONSTEXPR bool operator !=( const T& lhs, const T& rhs ) noexcept ( noexcept ( static_cast < bool >( lhs == rhs ) ) )
341341 {
@@ -344,7 +344,7 @@ namespace tao
344344 };
345345
346346 template < typename T, typename U = T >
347- class less_than_comparable
347+ class TAO_OPERATORS_BROKEN_EBO less_than_comparable
348348 {
349349 TAO_OPERATORS_NODISCARD friend TAO_OPERATORS_CONSTEXPR bool operator <=( const T& lhs, const U& rhs ) noexcept ( noexcept ( static_cast < bool >( lhs > rhs ) ) )
350350 {
@@ -378,7 +378,7 @@ namespace tao
378378 };
379379
380380 template < typename T >
381- class less_than_comparable < T >
381+ class TAO_OPERATORS_BROKEN_EBO less_than_comparable< T >
382382 {
383383 TAO_OPERATORS_NODISCARD friend TAO_OPERATORS_CONSTEXPR bool operator >( const T& lhs, const T& rhs ) noexcept ( noexcept ( static_cast < bool >( rhs < lhs ) ) )
384384 {
@@ -404,7 +404,7 @@ namespace tao
404404 };
405405
406406 template < typename T, typename U = T >
407- class equivalent
407+ class TAO_OPERATORS_BROKEN_EBO equivalent
408408 {
409409 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 ) ) )
410410 {
@@ -413,7 +413,7 @@ namespace tao
413413 };
414414
415415 template < typename T >
416- class equivalent < T >
416+ class TAO_OPERATORS_BROKEN_EBO equivalent< T >
417417 {
418418 TAO_OPERATORS_NODISCARD friend TAO_OPERATORS_CONSTEXPR bool operator ==( const T& lhs, const T& rhs ) noexcept ( noexcept ( static_cast < bool >( lhs < rhs ) ) )
419419 {
@@ -422,7 +422,7 @@ namespace tao
422422 };
423423
424424 template < typename T, typename U = T >
425- class partially_ordered
425+ class TAO_OPERATORS_BROKEN_EBO partially_ordered
426426 {
427427 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 ) ) )
428428 {
@@ -456,7 +456,7 @@ namespace tao
456456 };
457457
458458 template < typename T >
459- class partially_ordered < T >
459+ class TAO_OPERATORS_BROKEN_EBO partially_ordered< T >
460460 {
461461 TAO_OPERATORS_NODISCARD friend TAO_OPERATORS_CONSTEXPR bool operator >( const T& lhs, const T& rhs ) noexcept ( noexcept ( static_cast < bool >( rhs < lhs ) ) )
462462 {
@@ -608,7 +608,7 @@ namespace tao
608608 };
609609
610610 template < typename T >
611- class incrementable
611+ class TAO_OPERATORS_BROKEN_EBO incrementable
612612 {
613613 TAO_OPERATORS_NODISCARD friend T operator ++( T& arg, int /* unused*/ ) noexcept ( noexcept ( T( arg ), ++arg, T( std::declval< T >() ) ) ) // NOLINT
614614 {
@@ -619,7 +619,7 @@ namespace tao
619619 };
620620
621621 template < typename T >
622- class decrementable
622+ class TAO_OPERATORS_BROKEN_EBO decrementable
623623 {
624624 TAO_OPERATORS_NODISCARD friend T operator --( T& arg, int /* unused*/ ) noexcept ( noexcept ( T( arg ), --arg, T( std::declval< T >() ) ) ) // NOLINT
625625 {
0 commit comments