Для следующего кода
#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 = С++ 11) дает
error: ‘max_pole’ was not declared in this scope
Правильно ли это (поведение компилятора)? Обратите внимание, что если я разрешаю max_pole
, заменив его на kernel::max_pole
в указанной строке, он компилируется отлично.
EDIT Сообщено об ошибке bugzilla, принятой как ошибка С++/55992, см. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55992. Также происходит с gcc 4.7.x и 4.8.0.