对于以下代码
#include <array>
template<unsigned MaxP, typename type>
struct kernel
{
static constexpr unsigned max_pole(unsigned P)
{ return P>MaxP? MaxP:P; }
template<unsigned P>
using array = std::array<type,max_pole(P)>; // wrong?
template<unsigned P>
static void do_something(array<P> const&, array<P>&);
};
gcc 4.7.0 (g++ -c -std=c++11) 给出
error: ‘max_pole’ was not declared in this scope
这是正确的(编译器的行为)吗?请注意,如果我通过在指示的行上max_pole
替换它来解决kernel::max_pole
,它编译得很好。
编辑报告给 bugzilla,被接受为 bug c++/55992,见http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55992。gcc 4.7.x 和 4.8.0 也会出现。