目前,我正在使用Boost.Phoenix函数式编程库来创建匿名函子。当在仿函数评估中使用只读参数时,我偶然发现了赋值运算符表达式的问题:
using boost::phoenix::arg_names::_1;
int a = 0, int b = 0, int c = 0;
(_1 + 1)(a); // OK
(_1 + 1)(a, 0); // OK
(_1 + 1)(a, 0, 1); // OK
// but...
(_1 = 1)(a); // OK
(_1 = 1)(a, 0); // OK
(_1 = 1)(a, 0, 1); // ERROR: read-only variable is not assignable
(_1 = 1)(a, b, 0); // ERROR
(_1 = 1)(a, b, c); // OK
特别是,我不明白为什么表达式(_1 = 1)(a, 0)
工作正常,但是再添加一个常量参数,编译崩溃了。知道发生了什么以及如何解决这个问题吗?
我尝试使用编译器gcc-4.8.1和clang-3.4来升级1.56.0和1.60.0。