То, что я хочу сделать, можно обобщить на следующий код:
struct A{};
struct B{
A& a;
B(A& a) noexcept : a(a){}
int operator()(int) {}
};
int main(){
A a;
B(a)(2);
}
И мой компилятор (g++ 6) отклонил код, жалующийся, что a затеняет параметр. Однако, если я попытаюсь явно вызвать operator(), он работает так, как ожидалось.
Кажется, что g++ будет игнорировать круглые скобки и увидеть инструкцию как объявление.
Является ли это указанным или ожидаемым поведением?