我在Ubuntu 15.10 64bit上使用gcc 5.2.1。 将size_t参数转发给函数调用会导致编译器错误。
以下代码无法编译:
#include <cstdlib>
template<size_t SIZE>
struct A {
template<size_t SIZE2> void func() const {}
};
template<class T> void do_something() {
constexpr size_t SIZE = T::SIZE; // Replace this line to make it working
//constexpr size_t SIZE = 5; // If this line is used instead, it works.
A<SIZE> obj;
obj.func<1>();
}
这里是编译器输出:
$ g++ main.cpp --std=c++14
main.cpp: In function ‘void do_something()’:
main.cpp:12:15: error: expected primary-expression before ‘)’ token
obj.func<1>();
^
但是,如果我用另一个替换标记的行,它编译得很好。
这是什么原因?这是编译器错误吗?我认为obj.func&lt; 1&gt;()调用应该只取决于SIZE变量的类型,而不是它的初始化方式。
我做错了吗?有关解决方法的任何想法吗?