Sadece C++ 11'den yeni std :: işleviyle oynuyordum ve C++ ++ 3.2 ve Intel C++ derleyici 13.1 ile derleyen bir örnek yazdım ama g ++ 4.8 ile değil . Bunu bir hata olarak rapor etmeden önce, gerçekten aptalca bir şey yapmadığımı ve bunun aslında derlenmesi gerektiğini kontrol edeceğimi düşündüm. Yani, aşağıdaki kod geçerli C++ 11 mi?G ++, clang ++ ve std :: function
template <typename C>
void map(C& c, std::function<typename C::value_type(typename C::value_type)> f)
{
for(auto& x : c) {
x = f(x);
}
}
int main()
{
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
map(v, [](int x) { return x+2; });
for(auto x : v) {
std::cout << x << std::endl;
}
}
Bu kod çok faydalı olmadığını fark ama çınlama ve Intel C++ derlenmiş ve gcc olmadıkları Tek beni vurdu.
DÜZENLEME:
struct {
int operator() (int a) {
return a+2;
}
} add2s;
map(v, add2s);
int add2 (int a) {
return a+2;
}
map(v,add2);
çınlama ve ICPC ayrıca her ikisi de derleme: harita funktor veya işlev işaretçisi geçerken gcc de aynı kodu derlenmez.
Hata nedir, g ++ size gösterir? –
clang 3.0 -std = C++ 11 bu kodda çökme dökümleri – nurettin
'' main() :: ',' std :: function 'türünden türetilmedi Sanırım, en azından aldığım şey bu. –
filmor