[c++] 함수 정의의 클래스 외부 선언자에서 클래스 이름을 완전히 규정 할 수 없습니다.

이 프로그램은 원하지 않는 파싱 탐욕 막 다른 골목을 초래합니다 :

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)으로 테스트했지만 괄호가없는 규칙은 무엇 인지이 규칙을 실제로 알 수는 없습니다 . 후행 반환 유형을 선호합니다.


답변