Subject: | Fails to compile with g++ 6 |
On my Debian sid I had luck with the g++ compilation with version 6 by adding the -std=c++98 switch. Without that I get the following output:
% make
"/home/sand/src/perl/repoperls/installed-perls/host/k93x64sid/v5.25.4-20-gc2f7c0b/9af6/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- TigerHash.bs blib/arch/auto/Net/DirectConnect/TigerHash/TigerHash.bs 644
g++ -c -I. -D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -DVERSION=\"0.08\" -DXS_VERSION=\"0.08\" -fPIC "-I/home/sand/src/perl/repoperls/installed-perls/host/k93x64sid/v5.25.4-20-gc2f7c0b/9af6/lib/5.25.5/x86_64-linux-thread-multi/CORE" -I./dcpp/ -I../dcpp/ TigerHash.c
In file included from /home/sand/src/perl/repoperls/installed-perls/host/k93x64sid/v5.25.4-20-gc2f7c0b/9af6/lib/5.25.5/x86_64-linux-thread-multi/CORE/perl.h:5571:0,
from TigerHash.xs:7:
/home/sand/src/perl/repoperls/installed-perls/host/k93x64sid/v5.25.4-20-gc2f7c0b/9af6/lib/5.25.5/x86_64-linux-thread-multi/CORE/pp.h:66:17: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
"MARK push %p %"IVdf"\n", \
^
/home/sand/src/perl/repoperls/installed-perls/host/k93x64sid/v5.25.4-20-gc2f7c0b/9af6/lib/5.25.5/x86_64-linux-thread-multi/CORE/pp.h:76:17: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
"MARK inc %p %"IVdf"\n", \
^
In file included from /home/sand/src/perl/repoperls/installed-perls/host/k93x64sid/v5.25.4-20-gc2f7c0b/9af6/lib/5.25.5/x86_64-linux-thread-multi/CORE/perl.h:5876:0,
from TigerHash.xs:7:
/home/sand/src/perl/repoperls/installed-perls/host/k93x64sid/v5.25.4-20-gc2f7c0b/9af6/lib/5.25.5/x86_64-linux-thread-multi/CORE/inline.h:134:6: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
"MARK top %p %"IVdf"\n",
^
/home/sand/src/perl/repoperls/installed-perls/host/k93x64sid/v5.25.4-20-gc2f7c0b/9af6/lib/5.25.5/x86_64-linux-thread-multi/CORE/inline.h:144:6: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
"MARK pop %p %"IVdf"\n",
^
In file included from ./dcpp/MerkleTree.h:25:0,
from TigerHash.xs:23:
./dcpp/HashValue.h:51:8: error: specialization of 'template<class _Tp> struct std::hash' in different namespace [-fpermissive]
struct hash<dcpp::HashValue<T> > {
^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/bits/stl_bvector.h:1262:0,
from /usr/include/c++/6/vector:65,
from ./dcpp/stdinc.h:119,
from TigerHash.xs:19:
/usr/include/c++/6/bits/functional_hash.h:58:12: error: from definition of 'template<class _Tp> struct std::hash' [-fpermissive]
struct hash;
^~~~
In file included from ./dcpp/MerkleTree.h:25:0,
from TigerHash.xs:23:
./dcpp/HashValue.h:52:58: error: definition of 'std::size_t std::hash<dcpp::HashValue<T> >::operator()(const dcpp::HashValue<T>&) const' is not in namespace enclosing 'std::hash<dcpp::HashValue<T> >' [-fpermissive]
size_t operator()(const dcpp::HashValue<T>& rhs) const {
^~~~~
HTH&&Thanks,