使用g ++

时间:2015-09-27 13:02:04

标签: c++ templates c++14 clang++ g++4.9

以下代码适用于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编译?谢谢。附:我显然不需要template <typename T>,但这只是为了说明。

1 个答案:

答案 0 :(得分:3)

根据jesse Good,g ++ 4.9.2不支持变量模板。