尝试回答另一个问题,我编写了以下代码,这些代码在g ++(6.3.0)和clang ++(3.8.1)中表现不同
#include <iostream>
#include <type_traits>
template <typename>
struct foo
{ };
template <typename T>
using alias = foo<T>;
template <template <typename...> class, template <typename...> class>
struct bar : public std::false_type
{ };
template <template <typename...> class C>
struct bar<C, C> : public std::true_type
{ };
int main()
{
// g++ print 1
// clang++ print 0
std::cout << bar<foo, alias>::value << std::endl;
}
g ++打印1
(即:激活专门化bar
结构,即将foo
和alias
视为等号)并且clang ++打印0
(即:激活通用bar
结构,即将foo
和alias
视为不同的结果。)