summaryrefslogtreecommitdiffstats
path: root/libcxx/test/support/is_transparent.h
diff options
context:
space:
mode:
authorMarshall Clow <mclow.lists@gmail.com>2015-06-30 18:16:12 +0000
committerMarshall Clow <mclow.lists@gmail.com>2015-06-30 18:16:12 +0000
commit5b03e1ada8312e1aff57b829b7c328b85fcb7b0f (patch)
treec5f5dd930fbc9998c7b4c7899f85e42937ab24ad /libcxx/test/support/is_transparent.h
parentf8457a0735899ba71b7bb321cf88ff48b54c9d30 (diff)
downloadbcm5719-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.h73
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
OpenPOWER on IntegriCloud