diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2015-12-14 17:34:03 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2015-12-14 17:34:03 +0000 |
commit | 161eae2daa21537742c53c46bae3119e3c463136 (patch) | |
tree | 1ece37649edf2292fbbc103c5212053f4fe723c7 /libcxx/test | |
parent | d079285e057268aac058e365057729741b25716c (diff) | |
download | bcm5719-llvm-161eae2daa21537742c53c46bae3119e3c463136.tar.gz bcm5719-llvm-161eae2daa21537742c53c46bae3119e3c463136.zip |
Add add_lvalue_ref tests for a few function types, with a note why not more
llvm-svn: 255513
Diffstat (limited to 'libcxx/test')
-rw-r--r-- | libcxx/test/std/utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref.pass.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/libcxx/test/std/utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref.pass.cpp b/libcxx/test/std/utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref.pass.cpp index 8150ce04e37..5886d982661 100644 --- a/libcxx/test/std/utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref.pass.cpp +++ b/libcxx/test/std/utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref.pass.cpp @@ -22,6 +22,26 @@ void test_add_lvalue_reference() #endif } +template <class F> +void test_function0() +{ + static_assert((std::is_same<typename std::add_lvalue_reference<F>::type, F&>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same<std::add_lvalue_reference_t<F>, F&>::value), ""); +#endif +} + +template <class F> +void test_function1() +{ + static_assert((std::is_same<typename std::add_lvalue_reference<F>::type, F>::value), ""); +#if _LIBCPP_STD_VER > 11 + static_assert((std::is_same<std::add_lvalue_reference_t<F>, F>::value), ""); +#endif +} + +struct Foo {}; + int main() { test_add_lvalue_reference<void, void>(); @@ -31,4 +51,20 @@ int main() test_add_lvalue_reference<const int&, const int&>(); test_add_lvalue_reference<int*, int*&>(); test_add_lvalue_reference<const int*, const int*&>(); + +// LWG 2101 specifically talks about add_lvalue_reference and functions. +// The term of art is "a referenceable type", which a cv- or ref-qualified function is not. + test_function0<void()>(); +// test_function1<void() const>(); +// test_function1<void() &>(); +// test_function1<void() &&>(); +// test_function1<void() const &>(); +// test_function1<void() const &&>(); + + test_function0<void (Foo::*)()>(); +// test_function1<void (Foo::*)() const>(); +// test_function1<void (Foo::*)() &>(); +// test_function1<void (Foo::*)() &&>(); +// test_function1<void (Foo::*)() const &>(); +// test_function1<void (Foo::*)() const &&>(); } |