バインドされたメンバー関数から述語を作成する必要があるため、boost::function<bool(SomeObject const &)>
. それは問題ないようですが、1つのケースでそれを否定する必要もありました。でも
boost::function<bool(SomeObject const &)> pred;
std::not1(pred);
MSVC++ 9.0 (Visual Studio 2008) でコンパイルされず、参照への参照が無効であると不平を言う:
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\functional(213) : warning C4181: qualifier applied to reference type; ignored
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\functional(213) : error C2529: '_Left' : reference to reference is illegal
問題は、 asをboost::function
定義し、インスタンス化された by が内部的に使用しようとし、既に参照されているため、コンパイラがそれを拒否することです。C++11 でコンパイルできることは確かですが、これは C++03 のみの古いコンパイラです。だから私はそれが誰のせいなのか知りたい:argument_type
SomeObject const &
std::unary_negate<_Fn1>
std::not1
const typename _Fn1::argument_type&
T::argument_type
- コンパイラの、参照を折りたたむ必要があるため(明らかにそうではありません)、
- 標準ライブラリの、参照を取るファンクターを処理する準備ができている必要があるため (仕様では引数で定義
unary_negate
されているため、明らかにそうではありません)、const typename Predicate::argument_type& x
- ブーストの、
argument_type
実際の引数が or の場合でも参照されるべきではないため boost::function
参照引数と一緒に使用してはならないので、私のものですか?