나는 그 수업을 가지고 있습니다 :
#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;인해 이니셜 라이저가 없으면 유효하지 않습니다) consthistory)