La seguente definizione non è consentito dalla mia compilatore come std::string
ha un distruttore non banale (ha senso che teststr
non possono avere un dtor banale quando un membro non lo fa):La classe letterale con std :: string funziona solo con la specializzazione del modello?
class teststr
{
private:
std::string _m;
public:
constexpr teststr(std::string value) : _m(value) {};
constexpr std::string m() const { return _m; }
void m(std::string value) { _m = value; }
};
Tuttavia, il seguente equivalente (al meglio delle mie conoscenze) definizione di teststr
è consentito:
template<typename T>
class test
{
private:
T _m;
public:
constexpr test(T value) : _m(value) {};
constexpr T m() const { return _m; }
void m(T value) { _m = value; }
};
typedef test<std::string> teststr;
cosa si tratta templating tipo che rende questa definizione ha permesso?
magari fornendo quale compilatore si sta utilizzando? – Creris
g ++ (rev5, progetto Costruito da MinGW-W64) 4.8.1 – Matt
Cosa succede quando si crea un'istanza di typedef? –