なぜローカルに定義されたクラスを STL アルゴリズムの述語として使用できないのか、私はずっと疑問に思っていました。
質問: Approaching STL algorithms, lambda, local classes and other approachで、BubbaT は「C++ 標準ではローカル型を引数として使用することを禁止しているため」と述べています。
コード例:
int main() {
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
std::vector<int> v( array, array+10 );
struct even : public std::unary_function<int,bool>
{
bool operator()( int x ) { return !( x % 2 ); }
};
std::remove_if( v.begin(), v.end(), even() ); // error
}
標準のどこに制限があるか知っている人はいますか? ローカル型を許可しない理由は何ですか?
EDIT : C++11 以降、ローカル型をテンプレート引数として使用することは合法です。