Author: marshall Date: Tue Jun 30 13:16:12 2015 New Revision: 241092 URL: http://llvm.org/viewvc/llvm-project?rev=241092&view=rev Log: Forgot the support include file in r241091
Added: libcxx/trunk/test/support/is_transparent.h Added: libcxx/trunk/test/support/is_transparent.h URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/support/is_transparent.h?rev=241092&view=auto ============================================================================== --- libcxx/trunk/test/support/is_transparent.h (added) +++ libcxx/trunk/test/support/is_transparent.h Tue Jun 30 13:16:12 2015 @@ -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 _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits