Sam*_*rsa 8 c++ templates visual-c++
以下代码在GCC中编译(我使用的是ideone,它使用gcc-4.3.4)但不在Visual Studio中编译.它是标准代码和Visual C++ 2008和2010(我在两者中都尝试过)或非标准的错误,GCC很乐意编译它吗?
namespace cool
{
template <bool, typename = void> struct enable_if {};
template <typename T> struct enable_if<true, T> { typedef T type; };
template <typename T0, typename T1> struct is_same { enum { value = false }; };
template <typename T> struct is_same<T, T> { enum { value = true }; };
}
struct BasePolicy {};
struct BasePolicy2 {};
struct Faz {};
template <typename Policy,
typename = typename cool::enable_if<cool::is_same<BasePolicy, Policy>::value || cool::is_same<BasePolicy2, Policy>::value>::type >
struct Foo;
template <typename Policy>
struct Foo<Policy> {
Foo();
};
template <typename Policy>
Foo<Policy>::Foo() {
}
int main()
{
Foo<BasePolicy2> fb;
// Foo<Faz> fb1;
}
Run Code Online (Sandbox Code Playgroud)
错误1错误C2039:'{ctor}':不是'Foo'main.cpp 25的成员
请注意,问题是Foo构造函数的外部定义.如果你在类中定义它,那么Visual-C++很高兴:
template <typename Policy>
struct Foo<Policy> {
Foo() {}
};
Run Code Online (Sandbox Code Playgroud)
此外,以下代码在两者上编译(请注意||和缺少后的逻辑):
namespace cool
{
template <bool, typename = void> struct enable_if {};
template <typename T> struct enable_if<true, T> { typedef T type; };
template <typename T0, typename T1> struct is_same { enum { value = false }; };
template <typename T> struct is_same<T, T> { enum { value = true }; };
}
struct BasePolicy {};
struct BasePolicy2 {};
struct Faz {};
template <typename Policy,
typename = typename cool::enable_if<cool::is_same<BasePolicy, Policy>::value>::type >
struct Foo;
template <typename Policy>
struct Foo<Policy> {
Foo();
};
template <typename Policy>
Foo<Policy>::Foo() {
}
int main()
{
Foo<BasePolicy> fb;
// Foo<Faz> fb1;
}
Run Code Online (Sandbox Code Playgroud)
在信用到期的信用额度,这是DietmarKühl给我的略微修改版本)
| 归档时间: |
|
| 查看次数: |
428 次 |
| 最近记录: |