Właśnie bawiłem się z nową funkcją std :: z C++ 11, i napisałem przykład, który kompiluje się z clang ++ 3.2 i kompilatorem Intel C++ 13.1, ale nie z g ++ 4.8 . Zanim zgłosiłem to jako błąd, pomyślałem, że sprawdzę, czy nie robię czegoś naprawdę głupiego i że to powinno się właściwie skompilować. Zatem, czy poniższy kod jest prawidłowy C++ 11?G ++, clang ++ i 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;
}
}
Zdaję sobie sprawę, że ten kod nie jest bardzo przydatne, ale uderzyło mnie jak dziwne, że dzyń i Intel C++ skompilowany i gcc nie.
EDIT: gcc nie będzie również skompilować ten sam kod przechodząc zmapować funktora lub funkcyjny wskaźnik:
struct {
int operator() (int a) {
return a+2;
}
} add2s;
map(v, add2s);
int add2 (int a) {
return a+2;
}
map(v,add2);
dzyń i ICPC również przygotować zarówno z nich.
Jaki błąd wyświetla się w g ++? –
clang 3.0 z opcją -std = C++ 11 zrzutu awaryjnego na tym kodzie – nurettin
''main() ::' nie pochodzi od 'std :: function ' "Myślę, że to przynajmniej to, co otrzymuję. –
filmor