Парамико висит, когда встречается отсутствие выхода

Похож на ошибку Clang для меня.

Общее правило состоит в том, что функции-члены одного и того же имени в разных базовых классах не перегружаются. Например:

struct Foo { void bar(); };
struct Baz { void bar(int); };
struct Quux : Foo, Baz { };

int main() { Quux().bar(); } // error on both GCC and Clang

По какой-то причине Clang не может диагностировать эту двусмысленность для operator().

A using-declaration поднимает именованные базовые классы в область производного класса , что позволяет им перегружать. Следовательно:

struct Quux_2 : Foo, Baz { using Foo::bar; using Baz::bar; };
Quux_2().bar(); // OK.

В рабочей версии кода декларации using рекурсивно привносят каждое объявление operator() в аргументы шаблона в область самого производного класса, что позволяет им перегружать.

0
задан UsualSuspect7 13 July 2018 в 19:09
поделиться