Jako część klasy cech dla większego programu podjąłem próbę utworzenia statycznej zmiennej klasy, która może mieć inną wartość w zależności od typu, z którym utworzono instancję otaczającego szablonu.G ++ Błąd kompilatora lub wadliwy kod? : "definicja szablonu bez szablonu"
uprościłem odpowiedni kod do wytworzenia przykład goły, co mówię:
#include <iostream>
#include <string>
#include <type_traits>
template <class T, class Enable = void>
struct Foo;
template <class T>
struct Foo<T,
typename std::enable_if<std::is_integral<T>::value>::type
>
{
static std::string message;
};
template <class T>
struct Foo<T,
typename std::enable_if<std::is_floating_point<T>::value>::type
>
{
static std::string message;
};
template <class T, class Enable>
std::string Foo<T, Enable>::message;
z gcc 4.6, co daje błąd kompilatora: template definition of non-template ‘std::string Foo<T, Enable>::message
. Problem pojawia się z powodu ostatnich dwóch linii, w których właśnie definiuję zmienną statyczną std::string Foo<T, Enable>::message
.
Jestem zdezorientowany, dlaczego tak się dzieje. Błąd kompilatora zniknie, jeśli pominę dwie ostatnie linie (ale oczywiście spowoduje to błędy linkera). Czy jest to błąd kompilatora w GCC?
+1 za "przykład z bezkształtnym kości". http://sscce.org/. –
Musisz dołączyć –
@Vaughn, to nie jest problem tutaj, ale zaktualizowałem fragment kodu. – Channel72