当我定义
时template <class T> struct A {};
template <class T> using B = A<T>;
B只是A的别名。如何在编译时检查?我试过了:
#include <type_traits>
template <template <class...> class T, template <class...> class U>
struct IsAlias: std::false_type {};
template <template <class...> class T> struct IsAlias<T, T>: std::true_type {
};
int main() {
static_assert(IsAlias<A, B>(), ""); // Error
static_assert(IsAlias<B, B>(), ""); // OK
static_assert(std::is_same<A<int>, B<int> >(), ""); // OK
}
它不起作用。在g ++ 4.8.1和clang ++ 3.3中使用“-std = c ++ 11”
进行测试