Für den folgenden Code gefundenstatische constexpr Memberfunktion in Templat unter Verwendung des Ausdrucks nicht
#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) gibt
error: ‘max_pole’ was not declared in this scope
dies ist richtig (Verhalten des Compilers)? Beachten Sie, dass, wenn ich max_pole
auflösen, indem Sie es durch kernel::max_pole
in der angegebenen Zeile ersetzen, kompiliert es gut.
BEARBEITEN Berichtet zu Bugzilla, akzeptiert als Fehler C++/55992, siehe http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55992. Tritt auch mit gcc 4.7.x und 4.8.0 auf.
Nur getestet: gleich für 'g ++ 4.7.2' Jemand hat eine neuere Version wie 4.8? Vielleicht ist dies ein Fehler, der behoben wurde ... – leemes