Ця програма призводить до небажаного розбору жадібності в тупику:
struct float4x4 {};
class C
{
float4x4 M();
};
float4x4 ::C::M()
{
return float4x4{};
}
: 8: 1: помилка: жоден член з ім'ям "C" у "float4x4"; ти мав на увазі просто "С"?
float4x4 :: C :: M ()
^ ~~~~~~~~~~~
Що можна "виправити", використовуючи зворотний тип повернення:
auto ::C::M() -> float4x4
{}
тепер все добре.
Отже, я вважаю, що ми не можемо повністю визначити ім'я класу під час використання синтаксису декларатора заголовка типу?
@Someprogrammerdude так, перевірте це godbolt.org/z/mt6GHD
—
v.oddou
::C
Частина виглядає як обхідний шлях для якого - то іншого питання. Інакше це могло бути просто C
(як пропонує компілятор;)
@rustyx - це лише механічне повторне видалення коду транспілером, який не хоче виконувати надскладне "знайти найменш кваліфіковане ім'я" на цій позиції. випромінювання імені FQ повністю обходить пошук і зручно для таких інструментів.
—
v.oddou
::
, я думаю, іншого шляху немає.