diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2015-06-30 18:16:12 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2015-06-30 18:16:12 +0000 |
commit | 5b03e1ada8312e1aff57b829b7c328b85fcb7b0f (patch) | |
tree | c5f5dd930fbc9998c7b4c7899f85e42937ab24ad /libcxx/test/support/is_transparent.h | |
parent | f8457a0735899ba71b7bb321cf88ff48b54c9d30 (diff) | |
download | bcm5719-llvm-5b03e1ada8312e1aff57b829b7c328b85fcb7b0f.tar.gz bcm5719-llvm-5b03e1ada8312e1aff57b829b7c328b85fcb7b0f.zip |
Forgot the support include file in r241091
llvm-svn: 241092
Diffstat (limited to 'libcxx/test/support/is_transparent.h')
-rw-r--r-- | libcxx/test/support/is_transparent.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/libcxx/test/support/is_transparent.h b/libcxx/test/support/is_transparent.h new file mode 100644 index 00000000000..58255248abc --- /dev/null +++ b/libcxx/test/support/is_transparent.h @@ -0,0 +1,73 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef TRANSPARENT_H +#define TRANSPARENT_H + +// testing transparent +#if _LIBCPP_STD_VER > 11 + +struct transparent_less +{ + template <class T, class U> + constexpr auto operator()(T&& t, U&& u) const + noexcept(noexcept(std::forward<T>(t) < std::forward<U>(u))) + -> decltype (std::forward<T>(t) < std::forward<U>(u)) + { return std::forward<T>(t) < std::forward<U>(u); } + typedef void is_transparent; // correct +}; + +struct transparent_less_no_type +{ + template <class T, class U> + constexpr auto operator()(T&& t, U&& u) const + noexcept(noexcept(std::forward<T>(t) < std::forward<U>(u))) + -> decltype (std::forward<T>(t) < std::forward<U>(u)) + { return std::forward<T>(t) < std::forward<U>(u); } +private: +// typedef void is_transparent; // error - should exist +}; + +struct transparent_less_private +{ + template <class T, class U> + constexpr auto operator()(T&& t, U&& u) const + noexcept(noexcept(std::forward<T>(t) < std::forward<U>(u))) + -> decltype (std::forward<T>(t) < std::forward<U>(u)) + { return std::forward<T>(t) < std::forward<U>(u); } +private: + typedef void is_transparent; // error - should be accessible +}; + +struct transparent_less_not_a_type +{ + template <class T, class U> + constexpr auto operator()(T&& t, U&& u) const + noexcept(noexcept(std::forward<T>(t) < std::forward<U>(u))) + -> decltype (std::forward<T>(t) < std::forward<U>(u)) + { return std::forward<T>(t) < std::forward<U>(u); } + + int is_transparent; // error - should be a type +}; + +struct C2Int { // comparable to int + C2Int() : i_(0) {} + C2Int(int i): i_(i) {} + int get () const { return i_; } +private: + int i_; + }; + +bool operator <(int rhs, const C2Int& lhs) { return rhs < lhs.get(); } +bool operator <(const C2Int& rhs, const C2Int& lhs) { return rhs.get() < lhs.get(); } +bool operator <(const C2Int& rhs, int lhs) { return rhs.get() < lhs; } + +#endif + +#endif // TRANSPARENT_H |