Opened 14 years ago

Closed 10 years ago

#2103 closed Bugs (fixed)

ostream::operator<<(bool) is called if optional_io.hpp is not included

Reported by: nasonov Owned by: Fernando Cacciola
Milestone: Boost 1.36.0 Component: optional
Version: Boost 1.35.0 Severity: Problem
Keywords: Cc:

Description

If you pass an optional<T> value to ostream, it would print a result of safe_bool() if <boost/optional/optional_io.hpp> is not included.

$ cat -n unspecified_bool_type.cpp
     1  #include <iostream>
     2  #include <boost/optional/optional.hpp>
     3
     4  boost::optional<char> o('o');
     5
     6  void without_io()
     7  {
     8    std::cout << o << '\n';
     9  }
    10
    11  #include <boost/optional/optional_io.hpp>
    12
    13  void with_io()
    14  {
    15    std::cout << o << '\n';
    16  }
    17
    18  int main()
    19  {
    20    without_io();
    21    with_io();
    22  }
$ ./a.out
1
 o

This can be fixed by a adding forward declaration of operator<< to optional_fwd.hpp.

Note that other uses of unspecified_bool_type may be buggy.

Attachments (1)

2103.patch (1.9 KB ) - added by nasonov 14 years ago.
Patch (not against the latest version in the trunk) that fixes #2103 and also fixes incorrect uses of BOOST_NO_TEMPLATED_STREAMS.

Download all attachments as: .zip

Change History (2)

by nasonov, 14 years ago

Attachment: 2103.patch added

Patch (not against the latest version in the trunk) that fixes #2103 and also fixes incorrect uses of BOOST_NO_TEMPLATED_STREAMS.

comment:1 by Steven Watanabe, 10 years ago

Resolution: fixed
Status: newclosed

(In [82930]) Add a forward declaration of the ostream operator for optional. Fixes #2103.

Note: See TracTickets for help on using tickets.