http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58815

--- Comment #11 from ulf <q1 at oxyba dot de> ---
i see evil implicit conversion. 

i modified lines 254, 337 and 421 to 

explicit operator long long() const { return (long long)__val; }

like suggested in n3407.



#include<decimal/decimal>
int main(){
  std::decimal::decimal32 x(101.5051);
  long long a = (long long)x; // OK
  long long b = static_cast<long long>(x); // OK
  //long long c = x; // error
  //long d = (long)x; // error
  //long e = static_cast<long>(x); // error

  std::decimal::decimal64 y(101.5051);
  long long f = (long long)y; // OK
  long long g = static_cast<long long>(y); // OK
  //long long h = y; // error
  //long i = (long)y; // error
  //long j = static_cast<long>(y); // error

  std::decimal::decimal128 z(101.5051);
  long long k = (long long)z; // OK
  long long l = static_cast<long long>(z); // OK
  //long long m = z; // error
  //long n = (long)z; // error
  //long o = static_cast<long>(z); // error
  return 0;
}


some other issues regarding std::decimal

std::is_decimal_floating_point<std::decimal::decimalXXX> in type_traits 

see page 7, chapter 3.11.1 and 2 (page 62) in
www.open-std.org/jtc1/sc22/open/n4112.pdf

std::numeric_limits<std::decimal::decimalXXX> in limits

see chapter 3.3 in
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1977.html

Reply via email to