使用 g++ 的 decltype 模板声明
Template declaration of decltype with g++
以下代码适用于 clang 版本 3.6.0。
但是当我将它与 g++ 4.9.2 (Ubuntu 4.9.2-10ubuntu13) 一起使用时
我收到一个错误:
//g++ -std=c++14 testgcc.cpp
#include <iostream>
using namespace std;
template<typename T>
constexpr auto doSomething(){
return 123;
}
template<typename T>
decltype(doSomething<T>()) result = doSomething<T>();
decltype(doSomething<int>()) result2 = result<int>;
int main(void){
cout<<result2<<endl;
}
我得到的错误是:
testgcc.cpp:12:28: error: template declaration of ‘decltype (doSomething<T>()) result’
decltype(doSomething<T>()) result = doSomething<T>();
^
testgcc.cpp:14:40: error: ‘result’ was not declared in this scope
decltype(doSomething<int>()) result2 = result<int>;
^
testgcc.cpp:14:47: error: expected primary-expression before ‘int’
decltype(doSomething<int>()) result2 = result<int>;
有什么方法可以让我用 gcc 编译代码吗?谢谢。 p.s。我显然不需要 template <typename T>
但这只是为了说明。
根据C++1y/C++14 Support in GCC,g++ 4.9.2 不支持变量模板。
以下代码适用于 clang 版本 3.6.0。 但是当我将它与 g++ 4.9.2 (Ubuntu 4.9.2-10ubuntu13) 一起使用时 我收到一个错误:
//g++ -std=c++14 testgcc.cpp
#include <iostream>
using namespace std;
template<typename T>
constexpr auto doSomething(){
return 123;
}
template<typename T>
decltype(doSomething<T>()) result = doSomething<T>();
decltype(doSomething<int>()) result2 = result<int>;
int main(void){
cout<<result2<<endl;
}
我得到的错误是:
testgcc.cpp:12:28: error: template declaration of ‘decltype (doSomething<T>()) result’
decltype(doSomething<T>()) result = doSomething<T>();
^
testgcc.cpp:14:40: error: ‘result’ was not declared in this scope
decltype(doSomething<int>()) result2 = result<int>;
^
testgcc.cpp:14:47: error: expected primary-expression before ‘int’
decltype(doSomething<int>()) result2 = result<int>;
有什么方法可以让我用 gcc 编译代码吗?谢谢。 p.s。我显然不需要 template <typename T>
但这只是为了说明。
根据C++1y/C++14 Support in GCC,g++ 4.9.2 不支持变量模板。