Per il seguente codicestatica funzione membro constexpr in templato utilizzando espressione non trovata
#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) dà
error: ‘max_pole’ was not declared in this scope
E` corretto (comportamento del compilatore)? Notare che se risolvo max_pole
sostituendolo con kernel::max_pole
sulla linea indicata, esso viene compilato correttamente.
EDIT Segnalato a bugzilla, accettato come errore C++/55992, vedere http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55992. Si verifica anche con gcc 4.7.xe 4.8.0.
Appena testato: lo stesso per 'g ++ 4.7.2' Qualcuno ha una versione più recente come 4.8? Forse questo è un bug che è stato risolto ... – leemes