1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
//===----------------------------------------------------------------------===//
//
// 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.
//
//===----------------------------------------------------------------------===//
// type_traits
// extension
// template <typename _Tp> struct __has_operator_addressof
#include <type_traits>
#ifndef _LIBCPP_HAS_NO_CONSTEXPR
struct A
{
};
struct B
{
constexpr B* operator&() const;
};
struct D;
struct C
{
template <class U>
D operator,(U&&);
};
struct E
{
constexpr C operator&() const;
};
#endif // _LIBCPP_HAS_NO_CONSTEXPR
int main()
{
#ifndef _LIBCPP_HAS_NO_CONSTEXPR
static_assert(std::__has_operator_addressof<int>::value == false, "");
static_assert(std::__has_operator_addressof<A>::value == false, "");
static_assert(std::__has_operator_addressof<B>::value == true, "");
static_assert(std::__has_operator_addressof<E>::value == true, "");
#endif // _LIBCPP_HAS_NO_CONSTEXPR
}
|