Tôi chỉ đang chơi với hàm std :: mới từ C++ 11, và tôi đã viết một ví dụ biên dịch với clang ++ 3.2 và trình biên dịch C++ của Intel 13.1 nhưng không phải với g ++ 4.8 . Trước khi tôi báo cáo lỗi này, tôi nghĩ rằng tôi sẽ kiểm tra xem tôi không làm điều gì đó thực sự ngu ngốc và điều này thực sự phải biên dịch. Vì vậy, mã sau đây có hợp lệ C++ 11 không?G ++, clang ++ và 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;
}
}
Tôi nhận thấy rằng mã này không hữu ích nhưng nó đánh tôi như kỳ quặc mà clang và Intel C++ biên dịch nó và gcc không.
EDIT: gcc cũng sẽ không biên dịch mã tương tự khi đi qua bản đồ một functor hoặc chức năng con trỏ:
struct {
int operator() (int a) {
return a+2;
}
} add2s;
map(v, add2s);
int add2 (int a) {
return a+2;
}
map(v,add2);
kêu vang và ICPC cũng biên dịch cả hai.
Lỗi là gì, g ++ cho bạn thấy? –
clang 3.0 với -std = C++ 11 bãi đổ vỡ trên mã này – nurettin
''chính() ::' không được bắt nguồn từ hàm 'std :: ' Tôi đoán, đó là ít nhất những gì tôi nhận được. –
filmor