私はそれらのクラスを持っています:
#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;
}
コンパイル時、a_mデフォルトでは構築できませんが可能aです。
に変更Cする場合:
struct C {
int i;
};
すべて順調。
Clang 9.0.0でテスト済み。
C() {}動作します。
static_assertinはA失敗しますが、代わりにデフォルトでT内部を構築するA(たとえば、T t;そこにメンバーを置く)と、すべて正常に動作します。タイプ特性があなたに伝えていることと実際に可能なことの間の不一致...
const int x;、イニシャライザなしでは無効です。これは、純粋constに組み込み型の初期化動作と歴史)