Ich habe diese Klassen:
#include <type_traits>
template <typename T>
class A {
public:
static_assert(std::is_default_constructible_v<T>);
};
struct B {
struct C {
int i = 0;
};
A<C> a_m;
};
int main() {
A<B::C> a;
}
Ist beim Kompilieren a_mnicht standardmäßig konstruierbar, aist es aber .
Beim Wechsel Czu:
struct C {
int i;
};
alles ist gut.
Getestet mit Clang 9.0.0.
C() {}funktioniert es auch.
static_assertIn Aschlägt fehl, aber wenn Sie stattdessen standardmäßig ein TInside von erstellen A(z. B. ein Mitglied T t;dort platzieren), funktioniert alles einwandfrei. Eine Inkonsistenz zwischen dem, was das
const int x;ist ohne Initialisierer ungültig, allein aufgrund des constund des Initialisierungsverhaltens von eingebauten Typen und einigen Geschichte)