다음과 같은 실증 프로그램을 고려하십시오.
#include <iostream>
int main()
{
typedef float T;
0.f.T::~T();
}
이 프로그램은에 의해 컴파일됩니다 Microsoft Visual Studio Community 2019
.
그러나 clang
와 gcc
같은 오류를 발행
prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T'
7 | 0.f.T::~T();
| ^~~~~
( 0.f ).T::~T()
다음 과 같이 표현식을 작성하면 세 컴파일러 모두 프로그램을 컴파일합니다.
질문이 생겼습니다.이 기록이 0.f.T::~T()
구문 적으로 유효합니까? 그렇지 않다면 어떤 구문 규칙이 깨졌습니까?
(0.f).T::~T();
float f = 1.0f.t;
것은 숫자 리터럴에 대한 오류를 생성합니다.
float
는 내장형 이며 호출 할 소멸자가 없습니다. 소멸자를 수동으로 호출하는 것조차 무엇입니까? 새로운 지역 이외의 지역에서는 큰 문제가 되지 않습니다.
0.f
하고.T
모두 GCC와 연타가 발생하는 것은 ...이 동의합니다