以下のコードでは、コンストラクター引数と関数呼び出し演算子引数の両方を使用した一時関数オブジェクトの呼び出しは、最も厄介な解析の問題のために、どういうわけかあいまいであると思われます。
#include <iostream>
class Fun
{
public:
explicit Fun(int i): v_(i) {}
void operator()(int j) const
{
std::cout << (v_ + j) << "\n";
}
private:
int v_;
};
int main()
{
int a = 1;
int b = 2;
Fun(a)(b); // ERROR: conflicting declaration 'Fun a'
(Fun(a))(b); // OK: prints 3
return 0;
}
Ideoneに出力します。
のように括弧を追加すると問題は解決しますが、宣言として解析(Fun(a))(b)
する方法がよくわかりません。Fun(a)(b)
Fun a