我有以下代码段:
当我按照以下方式编译它时:
这个错误在O3下出现,但在O1下没有。我已经使用comeau在线编译器、MS VC9.0和icc v11编译了代码,在所有情况下,代码都可以编译通过。
代码在使用
我希望有人能提供一些关于这个特定错误(警告)的见解,并说明如何解决它。
注:GCC版本为:
我有以下代码段:
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
template<typename Iterator>
void foo(Iterator begin, Iterator end)
{
typedef typename std::iterator_traits<Iterator>::value_type type;
type smallest = (*std::min_element(begin,end));
std::cout << smallest << std::endl;
}
int main()
{
std::list<int> l;
l.push_back(1);
l.push_back(2);
foo(l.begin(),l.end());
return 0;
}
当我按照以下方式编译它时:
g++ -pedantic -ansi -Wall -Werror -O2 -o test test.cpp
I get the following error:
cc1plus: warnings being treated as errors
In function ‘int main()’:
cc1plus: error: dereferencing pointer ‘pretmp.163’ does break strict-aliasing rules
cc1plus: note: initialized from here
这个错误在O3下出现,但在O1下没有。我已经使用comeau在线编译器、MS VC9.0和icc v11编译了代码,在所有情况下,代码都可以编译通过。
代码在使用
std::vector
、std::deque
、std::set
、char*
、int*
迭代器时运行良好,似乎是与std::list的实现非常特定有关。我希望有人能提供一些关于这个特定错误(警告)的见解,并说明如何解决它。
注:GCC版本为:
gcc (Ubuntu 4.4.1-4ubuntu9) 4.4.1
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.