Opened 6 years ago

Closed 6 years ago

#12308 closed Bugs (invalid)

Quantities cannot be sent to std::ostream

Reported by: gunnar.arndt@… Owned by: Matthias Schabel
Milestone: To Be Determined Component: units
Version: Boost 1.61.0 Severity: Showstopper
Keywords: quantity ostream operator<< g++ Cc:

Description

Compiling the following program

#include <iostream>

#include "boost/units/systems/si.hpp"
#include "boost/units/quantity.hpp"

int main() {
    boost::units::quantity<boost::units::si::electric_potential> quantity = 1 * boost::units::si::volt;
    std::cout << quantity;
	return 0;
}

that sends a quantity to a std::ostream with operator<< result in the following error message:

13:51:55 **** Incremental Build of configuration Debug for project Test ****
Info: Internal Builder is used for build
g++ -std=c++0x "-IC:\\firedect\\git\\boost" -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\Test.o" "..\\src\\Test.cpp" 
..\src\Test.cpp: In function 'int main()':
..\src\Test.cpp:8:18: error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
     std::cout << quantity;
                  ^
In file included from c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\iostream:39:0,
                 from ..\src\Test.cpp:1:
c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\ostream:602:5: note: initializing argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<2l> >, boost::units::list<boost::units::dim<boost::units::mass_base_dimension, boost::units::static_rational<1l> >, boost::units::list<boost::units::dim<boost::units::time_base_dimension, boost::units::static_rational<-3l> >, boost::units::list<boost::units::dim<boost::units::current_base_dimension, boost::units::static_rational<-1l> >, boost::units::dimensionless_type> > > >, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10l, boost::units::static_rational<3l> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > > > >]'
     operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
     ^

13:51:56 Build Finished (took 1s.190ms)

I got a little nervous when I noticed that old #6119 seems to describe the same problem, although I don't get what it has to do with Intel and Leopard? I hope I've just made a stupid mistake in my code.

Change History (1)

comment:1 by Jürgen Hunold, 6 years ago

Resolution: invalid
Status: newclosed

You are missing

#include "boost/units/io.hpp"

for this to compile.

Note: See TracTickets for help on using tickets.