【发布时间】:2015-03-11 13:26:44
【问题描述】:
我在 gcc-4.9.2 上遇到了一个奇怪的编译错误,其中相同的代码在其他编译器上工作,例如 gcc-4.8 或我能掌握的任何 clang。该问题与non-type template-arguments 有关。所以考虑一下:
#include <iostream>
#include <cstddef>
int templateParam;
template <int &D> struct TestTemplate {
int value() {}
};
template <> int TestTemplate<templateParam>::value() {
return templateParam;
}
TestTemplate<templateParam> testVariable;
int main() {
std::cout << testVariable.value() << "\n";
return 0;
}
gcc-4.9.2 出现以下错误:
prog.cpp:10:17: error: prototype for 'int TestTemplate<D>::value() [with int& D = (* & templateParam)]' does not match any in class 'TestTemplate<(* & templateParam)>'
template <> int TestTemplate<templateParam>::value() {
^
prog.cpp:7:9: error: candidate is: int TestTemplate<D>::value() [with int& D = (* & templateParam)]
int value() {}
^
这两个ideones更清楚:
这是编译器错误吗?
【问题讨论】: