我有以下模板类和其类型的(全局)变量:
template <typename ClassT>
struct ClassTester : public ClassT {
typedef ClassT type;
};
ClassTester<int> *aaa; // No error here
我预计会出现编译错误,因为int
无法派生,但这在 Visual C++ 2010 下编译得很好。
如果我删除指针,我会得到预期的编译错误(不能从 int 派生):
ClassTester<int> bbb; // Error here
我想使用这个类进行 SFINAE 测试给定类型是否是可以派生自的类:
template <typename T>
struct CanBeDerivedFrom {
template <typename C>
static int test(ClassTester<T> *) { }
template <typename>
static char test(...) { }
static const bool value = (sizeof(test<T>(0)) == sizeof(int));
};
然而,这总是报告真实的,即使对于原始类型,例如int
由于上述原因。这是 C++ 的预期/有效行为吗?