view gcc/testsuite/g++.dg/cpp0x/sfinae66.C @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 2b5abeee2509
children
line wrap: on
line source

// PR c++/95143
// { dg-do compile { target c++11 } }

struct false_type {
  static constexpr bool value = false;
};

struct true_type{
  static constexpr bool value = true;
};

template<class T>
T&& declval() noexcept;

template<typename T, typename U, typename = U>
struct is_static_castable : false_type
{};
template<typename T, typename U>
struct is_static_castable<T, U, decltype(static_cast<U>(declval<T>()))> : true_type
{};

class Base { };
struct A { };
class B: public Base { };

int main()
{
  constexpr auto canCast = is_static_castable<A, B>::value;
  static_assert(!canCast, "");
  constexpr auto canCast2 = is_static_castable<A, A>::value;
  static_assert(canCast2, "");
}