То, что я хочу сделать, можно обобщить на следующий код:
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++
будет игнорировать круглые скобки и увидеть инструкцию как объявление.
Является ли это указанным или ожидаемым поведением?