Код (Text): #include <iostream> using namespace std; template<typename S> struct B { static int x_; void plog() { clog << "xaxa\n"; } }; struct A : B<A> { void plog() { if(x_) B::plog(); } }; //template<> int B<A>::x_; // what it means? int B<A>::x_; // g++: error: specializing member ‘B<A>::x_’ requires ‘template<>’ syntax int main() { A::x_ = 1; A a; a.plog(); return 0; }
Код (Text): //template<> int B<A>::x_; // what it means? специализация шаблона... Код (Text): // g++: error: specializing member ‘B<A>::x_’ requires ‘template<>’ syntax и в чем вопрос?
хмм, поробуйте вот так Код (Text): static int B<>::x_; или Код (Text): static int B::x_; этот статик будет един для всех вариантов класса независимо от того какой шаблон компилятор заменил типом, тоесть х_ будет единым и для B<double> и для B<int> и для B<A>, ибо если статик значит это в одном экземпляре и по одному адресу.