0
次のコードは、クラスAにfoo()メソッドが存在するかどうかを調べます。このコードはvs2013ではコンパイルされていますが、vs2015では静的アサーションが失敗します。どのコンパイラのバージョンが真実を伝えていますか? vs2015の場合は、コードを修正する方法は?メソッド存在チェッカーコードがvs2015で壊れる
#include <type_traits>
struct MethodTester_foo {
template<typename U, typename MethodType>
static auto test(U* p) -> decltype(static_cast<MethodType>(U::foo));
template<typename U, typename MethodType> static auto test(...)->std::false_type;
};
template <typename Class, typename MethodType, class MethodTester>
using HasMethod =
typename std::conditional
<
std::is_same<
decltype(MethodTester::template test<Class, MethodType>(0)),
std::false_type
>::value,
std::false_type, std::true_type
>::type;
struct A { int foo() { return 1; } };
static_assert(HasMethod<A, int(A::*)(), MethodTester_foo>::value, "Has no method named foo");