将数字模板参数传递给模板函数会导致编译器错误

时间:2015-10-27 16:01:43

标签: c++ templates c++11 gcc c++14

我在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变量的类型,而不是它的初始化方式。

我做错了吗?有关解决方法的任何想法吗?

0 个答案:

没有答案