/* Copyright Barrett Adair 2016-2017 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE.md or copy at http ://boost.org/LICENSE_1_0.txt) */ #include #include #include #include #include "test.hpp" #ifdef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS int main(){ return 0; } #else struct foo {}; template void assert_lvalue_qualified() { CT_ASSERT( is_lvalue_reference_member()); } template void assert_not_lvalue_qualified() { CT_ASSERT(! is_lvalue_reference_member()); } int main() { { using f = void(foo::*)(); using l = void(foo::*)() &; using r = void(foo::*)() && ; using c = void(foo::*)() const; using cl = void(foo::*)() const &; using cr = void(foo::*)() const &&; using v = void(foo::*)() volatile; using vl = void(foo::*)() volatile &; using vr = void(foo::*)() volatile &&; using cv = void(foo::*)() const volatile; using cvl = void(foo::*)() const volatile &; using cvr = void(foo::*)() const volatile &&; assert_not_lvalue_qualified(); assert_lvalue_qualified(); assert_not_lvalue_qualified(); assert_not_lvalue_qualified(); assert_lvalue_qualified(); assert_not_lvalue_qualified(); assert_not_lvalue_qualified(); assert_lvalue_qualified(); assert_not_lvalue_qualified(); assert_not_lvalue_qualified(); assert_lvalue_qualified(); assert_not_lvalue_qualified(); } { struct f { int operator()() { return 0; } }; struct l { int operator()() & { return 0; } }; struct r { int operator()() && { return 0; } }; struct c { int operator()() const { return 0; } }; struct cl { int operator()() const & { return 0; } }; struct cr { int operator()() const && { return 0; } }; struct v { int operator()() volatile { return 0; } }; struct vl { int operator()() volatile & { return 0; } }; struct vr { int operator()() volatile && { return 0; } }; struct cv { int operator()() const volatile { return 0; } }; struct cvl { int operator()() const volatile & { return 0; } }; struct cvr { int operator()() const volatile && { return 0; } }; assert_not_lvalue_qualified(); assert_lvalue_qualified(); assert_not_lvalue_qualified(); assert_not_lvalue_qualified(); assert_lvalue_qualified(); assert_not_lvalue_qualified(); assert_not_lvalue_qualified(); assert_lvalue_qualified(); assert_not_lvalue_qualified(); assert_not_lvalue_qualified(); assert_lvalue_qualified(); assert_not_lvalue_qualified(); } { using f = void(); using l = void() &; using r = void() && ; using c = void() const; using cl = void() const &; using cr = void() const &&; using v = void() volatile; using vl = void() volatile &; using vr = void() volatile &&; using cv = void() const volatile; using cvl = void() const volatile &; using cvr = void() const volatile &&; CT_ASSERT(! is_lvalue_reference_member()); CT_ASSERT( is_lvalue_reference_member()); CT_ASSERT(! is_lvalue_reference_member()); CT_ASSERT(! is_lvalue_reference_member()); CT_ASSERT( is_lvalue_reference_member()); CT_ASSERT(! is_lvalue_reference_member()); CT_ASSERT(! is_lvalue_reference_member()); CT_ASSERT( is_lvalue_reference_member()); CT_ASSERT(! is_lvalue_reference_member()); CT_ASSERT(! is_lvalue_reference_member()); CT_ASSERT( is_lvalue_reference_member()); CT_ASSERT(! is_lvalue_reference_member()); } using f_ptr = void(*)(); assert_not_lvalue_qualified(); assert_not_lvalue_qualified(); assert_not_lvalue_qualified(); assert_not_lvalue_qualified(); } #endif //#ifdef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS