Re: [Boost-users] xlcpp: use of undeclared identifier 'decltype' used in boost/thread/lockable_traits.hpp
Greetings,
While attempting to build boost 1.70.0 for IBM Power9 using the IBM XL
compilers using the SPACK tool, the following errors occur repeatedly for
every header file that eventually includes boost/thread/lockable_traits.hpp
In file included from ./boost/thread/lock_types.hpp:14:
./boost/thread/lockable_traits.hpp:157:11: error: use of
undeclared identifier 'decltype'
decltype(void(boost::declval
On 9/9/2019 8:58 PM, Roy Musselman via Boost-users wrote:
Greetings,
While attempting to build boost 1.70.0 for IBM Power9 using the IBM XL compilers using the SPACK tool, the following errors occur repeatedly for every header file that eventually includes boost/thread/lockable_traits.hpp
In file included from ./boost/thread/lock_types.hpp:14:
*./boost/thread/lockable_traits.hpp*:157:11: error: use of undeclared identifier 'decltype' decltype(void(boost::declval
().lock())) ^ ./boost/thread/lockable_traits.hpp:165:11: error: use of undeclared identifier 'decltype' decltype(void(boost::declval ().unlock())) ^ ./boost/thread/lockable_traits.hpp:173:11: error: use of undeclared identifier 'decltype' decltype(bool(boost::declval ().try_lock())) ^ These errors could be resolved if the *-std=c++11*compiler option is used. Attempting to use SPACK options *cxxflags=-std=c++11*or *cxxstd=11*failed as if they were ignored. I was able to work-around this pervasive error by adding the following line to the file *tools/build/src/tools/xlcpp.jam*
flags xlcpp.compile.c++ OPTIONS <cxxstd>11 : -std=c++11 ;
Can you update the xlcpp.jam file to support the cxxstd=11 option, similar to what is implemented in pgi.jam?
I do not know why cxxflags=-std=c++11 did not work. Maybe it needed to be surrounded by quotes for whatever OS script you are using. Do you have a list of all the possible -std= choices for the compiler ? If we include one for c++11 we should probably include one for each possible choice.
It would be convenient if the compiler flag cxxflags=-std=c++1 worked.
It's specified in the spec used on the spack install command but it seems
that, for boost, the spack compiler wrappers are being bypassed. Even the
CXXFLAGS environment variable is being ignored. However the option
"cxxstd=11" made it all the way from the spack install command down to the
invocation of b2. But the underlying xlcpp.jam file was not respecting
that option, unlike jam files for other compilers.
'./bootstrap.sh' '--prefix=$
{path_to_boost}/boost-1.70.0-urzwfgarnvpznbxfbwzgh4b7u5xfs5dz'
'--with-toolset=xlcpp'
'--with-libraries=locale,random,wave,atomic,serialization,mpi,iostreams,regex,date_time,exception,log,thread,chrono,graph,system,timer,python,program_options,filesystem,test,math,graph_parallel'
'--with-python=/usr/tce/packages/python/python-3.7.2/bin/python3.7'
Building Boost.Build engine with toolset xlcpp...
tools/build/src/engine/bin.linuxppc/b2
. . .
'./b2' 'install' 'threading=multi' '-j' '32' '--user-config=$
{path_to_boost}/boost-1.70.0-urzwfgarnvpznbxfbwzgh4b7u5xfs5dz/spack-src/user-config.jam'
'variant=release' '-s' 'BZIP2_INCLUDE=/usr/bin/include' '-s'
'BZIP2_LIBPATH=/usr/bin/lib' '-s' 'ZLIB_INCLUDE=/usr/lib64/include' '-s'
'ZLIB_LIBPATH=/usr/lib64/lib' 'link=static,shared' '--layout=system'
'toolset=xlcpp' 'cxxstd=11' 'visibility=hidden'
Here are the various options for the -std= flag supported by the XL
compilers.
-std syntax (C only)
-std=
gnu9x
gnu99
c89
c90
c99
c9x
c11
c1x
iso9899:1990
iso9899:199409
iso9899:1999
iso9899:199x
iso9899:2011
gnu89
gnu90
gnu11
-std syntax (C++ only)
-std=
gnu++98
gnu++03
c++98
c++03
gnu++11
c++0x
gnu++0x
c++11
c++1y
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Roy Musselman
IBM HPC Application Analyst at Lawrence Livermore National Lab
email: roymuss@us.ibm.com
LLNL office: 925-422-6033
Cell: 507-358-8895, Home: 507-281-9565
From: Edward Diener via Boost-users
Greetings,
While attempting to build boost 1.70.0 for IBM Power9 using the IBM XL compilers using the SPACK tool, the following errors occur repeatedly for every header file that eventually includes boost/thread/lockable_traits.hpp
In file included from ./boost/thread/lock_types.hpp:14:
*./boost/thread/lockable_traits.hpp*:157:11: error: use of undeclared identifier 'decltype' decltype(void(boost::declval
().lock())) ^ ./boost/thread/lockable_traits.hpp:165:11: error: use of undeclared identifier 'decltype' decltype(void(boost::declval ().unlock())) ^ ./boost/thread/lockable_traits.hpp:173:11: error: use of undeclared identifier 'decltype' decltype(bool(boost::declval ().try_lock())) ^ These errors could be resolved if the *-std=c++11*compiler option is used. Attempting to use SPACK options *cxxflags=-std=c++11*or *cxxstd=11*failed as if they were ignored. I was able to work-around this pervasive error by adding the following line to the file *tools/build/src/tools/xlcpp.jam*
flags xlcpp.compile.c++ OPTIONS <cxxstd>11 : -std=c++11 ;
Can you update the xlcpp.jam file to support the cxxstd=11 option, similar to what is implemented in pgi.jam?
I do not know why cxxflags=-std=c++11 did not work. Maybe it needed to be surrounded by quotes for whatever OS script you are using. Do you have a list of all the possible -std= choices for the compiler ? If we include one for c++11 we should probably include one for each possible choice. _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.boost.org_mailman_listinfo.cgi_boost-2Dusers&d=DwICAg&c=jf_iaSHvJObTbx-siA1ZOg&r=VbqrAXlQpnebiErY_5eiikRXwQ6liADl21OT0KaeLhM&m=i4guxEX8n3KKwKvBpdOL_qptI0M5YC0NzktgdfuK0cM&s=7l9BRnOh37oFf088uO-lpcoc62jYKejeWjPbuZp0uU8&e=
On 9/10/2019 2:43 PM, Roy Musselman via Boost-users wrote:
It would be convenient if the compiler flag cxxflags=-std=c++1 worked. It's specified in the spec used on the spack install command but it seems that, for boost, the spack compiler wrappers are being bypassed. Even the CXXFLAGS environment variable is being ignored. However the option *"cxxstd=11"*made it all the way from the spack install command down to the invocation of b2. But the underlying xlcpp.jam file was not respecting that option, unlike jam files for other compilers.
'./bootstrap.sh' '--prefix=${path_to_boost}/boost-1.70.0-urzwfgarnvpznbxfbwzgh4b7u5xfs5dz' '--with-toolset=xlcpp' '--with-libraries=locale,random,wave,atomic,serialization,mpi,iostreams,regex,date_time,exception,log,thread,chrono,graph,system,timer,python,program_options,filesystem,test,math,graph_parallel' '--with-python=/usr/tce/packages/python/python-3.7.2/bin/python3.7' Building Boost.Build engine with toolset xlcpp... tools/build/src/engine/bin.linuxppc/b2 . . . './b2' 'install' 'threading=multi' '-j' '32' '--user-config=${path_to_boost}/boost-1.70.0-urzwfgarnvpznbxfbwzgh4b7u5xfs5dz/spack-src/user-config.jam' 'variant=release' '-s' 'BZIP2_INCLUDE=/usr/bin/include' '-s' 'BZIP2_LIBPATH=/usr/bin/lib' '-s' 'ZLIB_INCLUDE=/usr/lib64/include' '-s' 'ZLIB_LIBPATH=/usr/lib64/lib' 'link=static,shared' '--layout=system' 'toolset=xlcpp' '*cxxstd=11*' 'visibility=hidden'
Here are the various options for the -std= flag supported by the XL compilers.
-std syntax (C only) -std= gnu9x gnu99 c89 c90 c99 c9x c11 c1x iso9899:1990 iso9899:199409 iso9899:1999 iso9899:199x iso9899:2011 gnu89 gnu90 gnu11
-std syntax (C++ only) -std= gnu++98 gnu++03 c++98 c++03 gnu++11 c++0x gnu++0x c++11 c++1y
I assume "c++1y" implements the c++14 standard. I created a pull request for Boost Build on the 'develop' branch. Thanks for bringing this up.
participants (2)
-
Edward Diener
-
Roy Musselman