Opened 9 years ago

Last modified 9 years ago

#9582 new Feature Requests

Boost.Units: conversion to double with prefixed unit

Reported by: richel@… Owned by: Matthias Schabel
Milestone: To Be Determined Component: units
Version: Boost 1.54.0 Severity: Cosmetic
Keywords: Units conversion prefix Cc:

Description

A post to the Boost-users maillinglist suggested me to request this feature.

In the code below, I convert a double that is known to be in millimeters to a unit and back again. The latter fails, where it works as expected for meters.

I think that adding this feature increases the symmetry in the use of Boost.Units, as I have emphasised in my code.

I am aware of the great care the Boost.Units developers have in maintaining type-safety, so it might be that I am unaware of code compiling that shouldn't would this request be acknowledged.

using boost::units::conversion_factor;
using boost::units::quantity;
using boost::units::si::length;
using boost::units::si::meter;
using boost::units::si::milli;
typedef quantity<length> Length;

//This value is read from file
const double x_in_mm = 1.0;

//Add units
const Length x(x_in_mm * (milli * meter)); //Brackets added for emphasis

const double x_again_in_m  = x / meter; //Works

const double x_again_in_mm {
  x / (milli * meter) //Same brackets as at emphasis
}; //Why doesn't this?

assert(x_in_mm == x_again_in_mm);

Change History (2)

comment:1 by Steven Watanabe, 9 years ago

The first case is an /explicit/ conversion. The second would require an implicit conversion since there's no way to define an explicit conversion to double in C++03. It can be done in C++11, I believe.

comment:2 by richel@…, 9 years ago

It can be done in C++11, I believe.

I checked with GCC 4.8.1 in C++1y mode: the unexpected behavior remains

Note: See TracTickets for help on using tickets.