在C ++ 11中检查两种类型是否是别名模板

时间:2013-09-25 07:46:13

标签: c++ c++11

当我定义

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”

进行测试

0 个答案:

没有答案