当我定义
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”测试