[Bug lto/89358] New: Combining -std=c++14 and -std=c++17 objects gives ODR warnings
rogero at howzatt dot demon.co.uk
gcc-bugzilla@gcc.gnu.org
Thu Feb 14 21:05:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89358
Bug ID: 89358
Summary: Combining -std=c++14 and -std=c++17 objects gives ODR
warnings
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: lto
Assignee: unassigned at gcc dot gnu.org
Reporter: rogero at howzatt dot demon.co.uk
CC: marxin at gcc dot gnu.org
Target Milestone: ---
When object modules compiled with -std=c+14 and -std=c++17 are linked together
with -flto there can be warnings about ODR violations in standard library
headers
Example:
-- main.cpp --
#include <map>
extern void test();
int main()
{
std::map<int, int> m;
test();
}
-- test.cpp --
#include <map>
void test()
{
std::map<int, int> m;
}
-- ends --
g++ -flto -std=c++17 -c main.cpp
g++ -flto -std=c++14 -c test.cpp
g++ -flto main.o test.o
-- output --
/usr/share/gcc-trunk/include/c++/9.0.0/bits/stl_function.h:381:12: note: type
'struct less' itself violates the C++ One Definition Rule
381 | struct less : public binary_function<_Tp, _Tp, bool>
| ^
/usr/share/gcc-trunk/include/c++/9.0.0/bits/stl_tree.h:684:9: note: type
'struct _Rb_tree_impl' itself violates the C++ One Definition Rule
684 | struct _Rb_tree_impl
| ^
/usr/share/gcc-trunk/include/c++/9.0.0/bits/stl_map.h:100:11: note: type
'struct _Rep_type' itself violates the C++ One Definition Rule
100 | class map
| ^
With gcc trunk from 2019-01-19 on Cygwin.
Almost identical messages appear on RHEL with devtools-7 and with gcc 7.30 on
WSL
More information about the Gcc-bugs
mailing list