gcc-4.9.2:非类型模板参数

时间:2015-03-11 13:26:45

标签: c++ templates gcc

我在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() {}
         ^

这两个想法让它更清晰:

这是编译器错误吗?

1 个答案:

答案 0 :(得分:3)

  

这是编译器错误吗?

是的,我认为它是https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63658,并将在下一个版本中修复。