2016-06-16 2 views
4

std::weak_ptr 문서에 따르면, 하나는 constexprweak_ptr을 구성 할 수 있습니다 'const std::weak_ptr<int>'입니다. weak_ptr<int>에는 사용자 제공 소멸자가 있기 때문입니다. ,구성하는 constexpr 표준 : : weak_ptr를

내 질문은 (어떤 ++ 헤더 libc에보고하지)이이 libc의 ++ 버그, 또는 constexprweak_ptr 그냥 아무 의미가 없다 할과 실수를 constexpr의 기본 생성자를 갖는입니까? 앞으로도 계속 작동 할 것으로 기대합니까?

+0

'의 소멸자 weak_ptr' (A'weak_ptr'가에 달려 무엇인가'shared_ptr' 제어 블록의)을 해제에 대한 책임, 그래서 그것을 생각하지 않는다 'constexpr'이 될 수 있습니다. –

+0

당신이 말하는 문서를 링크하거나 인용하십시오. –

+0

C++ 14 (최종본 N3290)에서 기본 생성자가'constexpr'임을 알 수 있습니다. 그것은 나에게 당황 스럽다. –

답변

7

이는 libc의 ++ 버그

번호

constexprweak_ptr 그냥 아무 의미

예를하지 않습니다 수행합니다.

constexpr 기본 생성자가 실수입니까? 동적 초기화 전에 일어나는 비 문자 입력에 사용되는 생성자 constexpr 정적 및 스레드 저장 기간 변수 constant initialization 허용

호.

예를 들어 글로벌 기본값으로 구성된 weak_ptr 개체는 항상 초기화되며 전역 개체 생성자에서 안전하게 사용할 수 있습니다.

// TU 1 
namespace foo { 
    std::weak_ptr<int> meow; 
} 

// TU 2 
namespace foo { 
    extern std::weak_ptr<int> meow; 
} 

struct C { 
    C() { /* can safely use foo::meow here */ } 
} c; 

나는이 [constexprweak_ptr] 미래의 일을 기대할 수 있을까?

번호

+0

나는 그것에 관한 결함 보고서를 볼 수 없다. 당신은 디폴트 생성자에서'constexpr'에 대한 이론적 근거를 알고 있습니까? –

+1

@ Cheersandhth.-Alf 내가 말했듯이, 그것은 지속적인 초기화를 허용합니다. –

+0

네,하지만 제가 말했듯이, 당신은 그 이론적 근거를 알고 있습니까? –