Opened 8 years ago

Closed 7 years ago

#11064 closed Support Requests (wontfix)

boost support c++11 with Solaris Studio 12.4

Reported by: zhifan Owned by: Andrey Semashev
Milestone: To Be Determined Component: log
Version: Boost 1.57.0 Severity: Problem
Keywords: Cc:

Description (last modified by viboes)

My Environment:

  1. boost_version: 1_57
  2. solaris stuation version: SolarisStudio12.4-solaris-sparc-bin.tar.bz2 (download yesterday)
  3. OS version: bash-3.2$ cat /etc/release

Oracle Solaris 10 8/11 s10s_u10wos_17b SPARC

Copyright (c) 1983, 2011, Oracle and/or its affiliates. All rights reserved.

Assembled 23 August 2011

bash-3.2$ cd tools/build/src/engine/
bash-3.2$ ./build.sh sun
bash-3.2$ tools/build/src/engine/bin.solarissparc/bjam toolset=sun --prefix=/export/home/oracle/zhifan/boost address-model=64 --disable-icu --with-regex --with-log --with-program_options -j64  install

With some code fix in boost, I can run the above command without any "failed". Here is my simple test code:

bash-3.2$ cat boost_log.cc
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <vector>
int main() {
std::vector<int> a{1, 2, 3,4,5};
for (auto i : a) {
   BOOST_LOG_TRIVIAL(fatal) << "RedoFile::init ";
}
return 0;
}

bash-3.2$ CC -mt -std=c++11 -m64 -I/export/home/oracle/zhifan/boost/include -DBOOST_LOG_DYN_LINK -L/export/home/oracle/zhifan/boost/lib -lboost_log -DBOOST_LOG_DYN_LINK  boost_log.cc -o boost_log
"/export/home/oracle/zhifan/boost/include/boost/log/utility/formatting_ostream.hpp", line 551: Error: Cannot use boost::log::v2_mt_posix::basic_formatting_ostream<char, std::char_traits<char>, std::allocator<char>>::sentry to initialize bool.
"boost_log.cc", line 10:     Where: While instantiating "boost::log::v2_mt_posix::basic_formatting_ostream<char, std::char_traits<char>, std::allocator<char>>::operator<<(const char*)".
"boost_log.cc", line 10:     Where: Instantiated from non-template code.
"/export/home/oracle/zhifan/boost/include/boost/log/utility/formatting_ostream.hpp", line 551: Error: An expression of scalar type was expected.
"boost_log.cc", line 10:     Where: While instantiating "boost::log::v2_mt_posix::basic_formatting_ostream<char, std::char_traits<char>, std::allocator<char>>::operator<<(const char*)".
"boost_log.cc", line 10: Where: Instantiated from non-template code.
2 Error(s) detected.

But if I compile this code with boost library compiled by gcc, it works perfectly.

bash-3.2$ g++ -pthread -std=c++11 -m64 -I/export/home/oracle/zhifan/boost_gcc/include -DBOOST_LOG_DYN_LINK -L/export/home/oracle/zhifan/boost_gcc/lib -lboost_log -DBOOST_LOG_DYN_LINK boost_log.cc -o boost_log
bash-3.2$ export LD_LIBRARY_PATH=/export/home/oracle/zhifan/boost_gcc/lib:$LD_LIBRARY_PATH
bash-3.2$ ./boost_log
[2015-02-27 23:26:21.436813] [0x10000000] [fatal]   RedoFile::init
[2015-02-27 23:26:21.438511] [0x10000000] [fatal]   RedoFile::init
[2015-02-27 23:26:21.438591] [0x10000000] [fatal]   RedoFile::init
[2015-02-27 23:26:21.438662] [0x10000000] [fatal]   RedoFile::init
[2015-02-27 23:26:21.438735] [0x10000000] [fatal]   RedoFile::init

Change History (5)

comment:1 by viboes, 8 years ago

Description: modified (diff)

comment:2 by viboes, 8 years ago

Component: Nonelog
Owner: set to Andrey Semashev

comment:3 by Andrey Semashev, 8 years ago

This is a compiler bug, the sentry class defined by STL must be convertible to bool (which makes basic_formatting_ostream<>::sentry convertible as well). Please, report it to the compiler vendor.

As for the workaround, I don't have this compiler to test it. I'd appreciate if you could provide a patch. I can suggest two possible avenues of experimenting:

  1. Change all conditional expressions involving sentry to double negative forms. E.g. change "if (guard)" to "if (!!guard)".
  1. Add operator!() and BOOST_EXPLICIT_OPERATOR_BOOL() to basic_formatting_ostream<>::sentry definition.

comment:4 by Andrey Semashev, 7 years ago

Ping? Have you tried the suggested changes?

comment:5 by Andrey Semashev, 7 years ago

Resolution: wontfix
Status: newclosed

No answer from the reporter, further course of action unclear.

Note: See TracTickets for help on using tickets.