Может ли кто-нибудь объяснить, почему этот код сбой? Такое же поведение наблюдается и в обоих окнах с mingw и ubuntu.статическая инициализация переменных в классе шаблонов
В отладчике параметр «a» передается конструктору. Один «оптимизирован».
Авария происходит, когда я пытаюсь получить доступ к статическому члену two_;
three.h
#ifndef THREE_H
#define THREE_H
#include <string>
class One
{
public:
One(const std::string& a)
: a_(a)
{
}
std::string a_;
};
template<typename P>
class Two : public One
{
public:
Two()
: One(P::name)
{
}
std::string foo()
{
return a_;
}
};
template<typename T>
class Three
{
public:
struct Info
{
static std::string name;
};
typedef Two<Info> Two_t;
static Two_t two_;
};
template < typename T >
std::string Three<T>::Info::name = std::string("aaaa");
template < typename T >
typename Three<T>::Two_t Three<T>::two_ = Three<T>::Two_t();
#endif // THREE_H
Вы уверены, что не просто пропустили 'T' в шаблоне' в вашей последней строке? Когда я исправляю, что он компилирует все для меня: http://ideone.com/w5RFB8 –
Если ответы предполагают фиксированный недостающий 'T' в последнем' template ' –
WhozCraig
@JonathanMee приложение терпит крах. – orbitcowboy