C++11 でカスタム メタプログラミング テストを作成するにはどうすればよいですか? 私はこのようなものを書きたいと思います:
#include <type_traits>
#include <iostream>
struct A {};
template <typename T>
struct foo {
typedef typename std::conditional<std::is_pointer<T>::value,
typename std::remove_pointer<T>::type,
T>::type type;
};
template <typename A, typename B>
struct test1{typedef typename std::is_same<A, B>::value result;};
template <typename A, typename B>
struct test2{typedef typename std::is_same<A, typename foo<B>::type>::value result;};
template <typename A, typename B>
void testAll() {
std::cout << std::boolalpha;
std::cout << "test1: " << typename test1<A,B>::result << std::endl; // ERROR: expected ‘(’ before ‘<<’ token
std::cout << "test2: " << typename test2<A,B>::result << std::endl; // ERROR: expected ‘(’ before ‘<<’ token
// ...
}
int main()
{
typedef A type1;
testAll<A, type1>();
typedef const A* type2;
testAll<A, type2>();
// ...
}
hereから is_same 実装の可能性を見ました。そのようなものが必要ですか?
これを書くことが可能です:
std::cout << "test1: " << std::is_same<A, B>::value << std::endl;
私はこれを書きたいと思います:
std::cout << "test1: " << test1<A, B>::result << std::endl;