0

当我定义

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”测试

4

0 回答 0