@ Yakk 및 @ T.C에게 감사드립니다. 그들의 설명을 위해.
struct wrapper {
int value;
// non-explicit constexpr constructor
constexpr wrapper(int v) noexcept : value(v) {}
// non-constexpr copy & move constructors
wrapper(const wrapper& that) noexcept : value(that.value) {}
wrapper(wrapper&& that) noexcept : value(that.value) {}
};
constexpr wrapper make_wrapper(int v)
{
return {v};
}
int main()
{
constexpr auto x = make_wrapper(123); // error! copy/move construction,
// but no constexpr copy/move ctor
constexpr int y = make_wrapper(123).value; // ok
static_assert(y == 123, ""); // passed
}
을 그래서 make_wrapper
성공적으로 constexpr wrapper
반환 않는다 : 나는 일을 명확하게해야한다 예를 들어 느낌 constexpr
복사/이동 생성자가 없기 때문에 코드가 컴파일되는 것을 방지하는 것은 복사/이동 구조입니다 (일반적으로 컴파일러에 의해 생략 됨).
반환 된 (임시) wrapper
의 개체의 값을 constexpr
변수로 초기화하여 확인할 수 있습니다.
이 질문에 대해서는 의문의 여지가 없습니다. – immibis
@immibis 업데이트 됨 : –
cppreference가 'constexpr'을 허공에서 꺼내지 않았다고 알고 있습니다 ... –