이 프로그램은 원하지 않는 파싱 탐욕 막 다른 골목을 초래합니다 :
struct float4x4 {};
class C
{
float4x4 M();
};
float4x4 ::C::M()
{
return float4x4{};
}
: 8 : 1 : 오류 : ‘float4x4’에 ‘C’라는 멤버가 없습니다. 단순히 ‘C’를 의미 했습니까?
float4x4 :: C :: M ()
^ ~~~~~~~~~~~
후행 반환 유형을 사용하여 ‘고정’할 수 있습니다.
auto ::C::M() -> float4x4
{}
이제 모두 좋아.
heading-return-type 선언자 구문을 사용할 때 클래스 이름을 완전히 규정 할 수 없다고 생각합니까?
답변
명확하게 대괄호를 넣을 수 있습니다.
float4x4 (::C::M)()
{
return float4x4{};
}
gcc와 clang (both -pedantic
)으로 테스트했지만 괄호가없는 규칙은 무엇 인지이 규칙을 실제로 알 수는 없습니다 . 후행 반환 유형을 선호합니다.