#include <vector>
#include <string>
using namespace std;
template < class T>
struct MyType {
string name;
T data;
} ;
template < class T>
vector< MyType< T>> filter( vector< MyType< T>> items, vector< string> filter)
{
vector< MyType< T>> filteredItems;
copy_if( begin( items) , end( items) , begin( filteredItems) , any_of( begin( filter) , end( filter) , [ ] ( const MyType< T> & lhs, const MyType< T> & rhs) { return lhs.name == rhs.name ; } ) ) ;
return filteredItems;
} ;
int main( ) {
vector< MyType< int >> items { { "a" , 1 } , { "b" , 2 } , { "c" , 3 } } ;
vector< string> filter { "a" , "c" } ;
auto filteredItems = filter( items, filter) ;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KICAgIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0ZW1wbGF0ZTxjbGFzcyBUPgpzdHJ1Y3QgTXlUeXBlIHsKICBzdHJpbmcgbmFtZTsKICBUIGRhdGE7Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPgp2ZWN0b3I8TXlUeXBlPFQ+PiBmaWx0ZXIodmVjdG9yPE15VHlwZTxUPj4gaXRlbXMsIHZlY3RvcjxzdHJpbmc+IGZpbHRlcikKewogIHZlY3RvcjxNeVR5cGU8VD4+IGZpbHRlcmVkSXRlbXM7CiAgY29weV9pZihiZWdpbihpdGVtcyksIGVuZChpdGVtcyksIGJlZ2luKGZpbHRlcmVkSXRlbXMpLCBhbnlfb2YoYmVnaW4oZmlsdGVyKSwgZW5kKGZpbHRlciksIFtdKGNvbnN0IE15VHlwZTxUPiYgbGhzLCBjb25zdCBNeVR5cGU8VD4mIHJocykge3JldHVybiBsaHMubmFtZSA9PSByaHMubmFtZTsgfSkpOwogIHJldHVybiBmaWx0ZXJlZEl0ZW1zOwp9OwoKaW50IG1haW4oKSB7CiAgdmVjdG9yPE15VHlwZTxpbnQ+PiBpdGVtcyB7IHsiYSIsIDF9LCB7ImIiLCAyfSwgeyJjIiwgM30gfTsKICB2ZWN0b3I8c3RyaW5nPiBmaWx0ZXIgeyAiYSIsICJjIiB9OwogIGF1dG8gZmlsdGVyZWRJdGVtcyA9IGZpbHRlcihpdGVtcywgZmlsdGVyKTsKfQo=
compilation info
prog.cpp: In function 'int main()':
prog.cpp:22:44: error: no match for call to '(std::vector<std::basic_string<char> >) (std::vector<MyType<int> >&, std::vector<std::basic_string<char> >&)'
auto filteredItems = filter(items, filter);
^
stdout