Boost logo

Boost :

From: Pavel Vozenilek (pavel_vozenilek_at_[hidden])
Date: 2003-03-19 08:53:51


I use Borland C++ Builder 6, update 4, STLPort 4.5.1 (provided by Borland)
and Boost is 1.30.0beta1.

Following snippet of code fails:

-----------------
#include <boost/optional.hpp>
#include <utility>

void foo(const boost::optional<std::pair<unsigned, unsigned> >& aux =
    boost::optional<std::pair<unsigned, unsigned> >())
{}

int main() {}
-----------------

with error message:
[C++ Error] Unit1.cpp(12): E2188 Expression syntax
[C++ Error] Unit1.cpp(12): E2299 Cannot generate template specialization
from '_STLD::pair<_T1,_T2>'
[C++ Error] Unit1.cpp(12): E2299 Cannot generate template specialization
from 'boost::optional<T>'
[C++ Error] Unit1.cpp(13): E2257 , expected
[C++ Error] Unit1.cpp(33): E2151 Type mismatch in default value for
parameter 'aux'
[C++ Error] Unit1.cpp(12): E2293 ) expected

The same code compiles OK with Intel C++ 7.0.

If I use typedef it works OK with both BC++B and Intel C++:
-----------------
#include <boost/optional.hpp>
#include <utility>

typedef boost::optional<std::pair<unsigned, unsigned> > AType;

void foo(AType aux = AType())
{}

int main() {}
-----------------

Borland also fails with this construct:
-----------------
#include <boost/optional.hpp>

int main()
{
  boost::optional<int> aux(0);
  if (aux && *aux == 0) {
    aux.reset(1);
  }
}
-----------------

with this error message:
[C++ Error] Unit1.cpp(24): E2094 'operator&&' not implemented in type
'boost::optional<int>' for arguments of type 'bool'

Intel C++ 7.0 compiles and executes this snippet OK.

This works in BC++B:
-----------------
#include <boost/optional.hpp>

int main()
{
  boost::optional<int> aux(0);
  if ((!!aux) && *aux == 0) {
    aux.reset(1);
  }
}
-----------------

These problems may be caused by bugs in BC++B compiler. Sorry if this
problem was already spotted.

/Pavel


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk