«language-lawyer» 태그된 질문

프로그래밍 언어 및 환경의 공식 또는 권위있는 사양의 복잡성에 대한 질문

2
널 포인터 인수와 불가능한 사후 조건으로 표준 예외 구성
다음 프로그램을 고려하십시오. #include<stdexcept> #include<iostream> int main() { try { throw std::range_error(nullptr); } catch(const std::range_error&) { std::cout << "Caught!\n"; } } libstdc ++를 사용하는 GCC 및 Clang std::terminate은 메시지와 함께 프로그램을 중단하고 중단합니다 terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid 예외 구성시 libc ++ …

1
수명이 종료 된 객체의 멤버 함수 코 루틴을 재개하는 것이 UB입니까?
이 질문은이 의견에서 비롯됩니다 : C ++ 20 코 루틴에 대한 Lambda 수명 설명 이 예와 관련하여 : auto foo() -> folly::coro::Task<int> { auto task = []() -> folly::coro::Task<int> { co_return 1; }(); return task; } 따라서 반환 된 코 루틴을 실행하면 fooUB가 발생 하는지 여부가 문제입니다 . "객체의 수명이 …

1
지정되지 않은 암시 적 객체 생성
때문에 낮은 수준의 객체 조작을 위해 객체 P0593 내재적으로 작성이 허용 된 오브젝트가 작성 될 수있다 내재적 20 ++ C이다. 특히 제안에 의해 도입 된 문구 (예 : 특정 작업 할 수 있습니다 std::malloc자동으로이) 특정 유형의 객체의 수명, 소위 만들고 시작 암시 평생 유형을 , 경우 같은 오브젝트의 도입이 가지고 …

2
Foo <T> :: Foo (T &&) 호출에서 C ++가 T를 추론 할 수없는 이유는 무엇입니까?
다음과 같은 템플릿 구조가 주어집니다. template&lt;typename T&gt; struct Foo { Foo(T&amp;&amp;) {} }; 이것은 컴파일되고 다음과 T같이 추론됩니다 int. auto f = Foo(2); 그러나 이것은 컴파일되지 않습니다 : https://godbolt.org/z/hAA9TE int x = 2; auto f = Foo(x); /* &lt;source&gt;:12:15: error: no viable constructor or deduction guide for deduction of template …


1
클래스 전문화에 clang / gcc 불일치
전문하는 동안 나는이 문제를 건너 온 tuple_size/ tuple_element구조 바인딩 (17) C ++에서 사용자 정의 클래스. 아래 코드는 GCC에서는 컴파일되지만 clang에서는 컴파일되지 않습니다 (두 트렁크 버전 모두 아래 링크 참조). #include &lt;type_traits&gt; template&lt;typename T, typename... Ts&gt; using sfinae_t = T; template&lt;typename T, bool... Bs&gt; using sfinae_v_t = sfinae_t&lt;T, typename std::enable_if&lt;Bs&gt;::type...&gt;; template …

2
유형 punning 테마의 변형 : 적절한 사소한 구성
나는 이것이 매우 일반적인 주제라는 것을 알고 있지만 일반적인 UB를 쉽게 찾을 수있는 한 지금 까지이 변형을 찾지 못했습니다. 따라서 실제 데이터 사본을 피하면서 Pixel 객체를 공식적으로 소개하려고합니다. 이것이 유효합니까? struct Pixel { uint8_t red; uint8_t green; uint8_t blue; uint8_t alpha; }; static_assert(std::is_trivial_v&lt;Pixel&gt;); Pixel* promote(std::byte* data, std::size_t count) { Pixel …

1
불완전한 유형에 대한 포인터가 불완전 할 수 있습니까?
수 int (*)[]불완전한 유형을 수? C 2018 6.2.5 1의 말 : 변환 단위 내의 다양한 지점에서, 객체 유형이 불완전 하거나 ( 해당 유형의 객체 크기를 결정 하기에 충분한 정보가 없음) 완료 (충분한 정보가 있음) 될 수 있습니다. 따라서 유형의 크기를 알면 유형이 완전한 것 같습니다. 6.2.6.1 28은 특정 유형의 포인터가 …

1
연산자 new의 실행 순서와 생성자의 인수
합니까 C ++은 순서 지정 사양 operator new과의 생성자 A에를 new C(A()). g는 순서하자 ++ A()-&gt; new-&gt; C()하지만, 그 소리가하자 ++ new-&gt; A()-&gt; C(). 차이가 지정되지 않은 동작으로 인해 발생합니까? g ++ : 7.4.0 clang ++ : 10.0.0 #include &lt;iostream&gt; #include &lt;cstdlib&gt; struct A { A() { std::cout &lt;&lt; "call …

1
템플릿 및 이름 조회 이해
다음 코드 스 니펫을 이해하려고합니다. 스 니펫 # 1 template &lt;typename T&gt; struct A { static constexpr int VB = T::VD; }; struct B : A&lt;B&gt; { }; gcc9 또는 clang9 모두 여기에 오류가 발생하지 않습니다. Q.이 코드는 왜 컴파일됩니까? A&lt;B&gt;B에서 상속받을 때 인스턴스화하지 않습니까? B에는 VD가 없으므로 컴파일러에서 오류를 …

1
“강하게 전에 일어난다”는 무슨 뜻입니까?
C ++ 초안 표준에서는 "강하게 발생합니다"라는 문구가 여러 번 사용되었습니다. 예 : 종료 [basic.start.term] / 5 std :: atexit ([support.start.term] 참조)를 호출하기 전에 정적 저장 기간이있는 객체의 초기화 완료가 강력하게 발생하면 함수 호출이 std :: atexit에 전달되었습니다. 객체의 소멸자를 호출하기 전에 시퀀스됩니다. 정적 저장 시간으로 객체의 초기화가 완료되기 전에 std …
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.