Эта программа приводит к нежелательному тупику разбора:
struct float4x4 {};
class C
{
float4x4 M();
};
float4x4 ::C::M()
{
return float4x4{};
}
: 8: 1: ошибка: нет члена с именем 'C' в 'float4x4'; Вы имели в виду просто «С»?
float4x4 :: C :: M ()
^ ~~~~~~~~~~~
Который может быть «исправлен» с использованием конечного типа возврата:
auto ::C::M() -> float4x4
{}
сейчас все хорошо.
Итак, я так понимаю, мы не можем полностью определить имя класса при использовании синтаксиса объявления заголовка-возвращаемого типа?
c++
parsing
methods
fully-qualified-naming
v.oddou
источник
источник
::
, я полагаю, что другого пути нет.::C
Часть выглядит как обходной путь для какого - то другого вопроса. Иначе это могло бы быть простоC
(как подсказывает компилятор;)Ответы:
Вы можете поставить скобки для устранения неоднозначности:
Я не могу сказать вам, какое правило делает это нормально, хотя оно не без скобок, хотя я тестировал с gcc и clang (оба
-pedantic
). Я бы предпочел конечный тип возврата.источник