https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78934
Bug ID: 78934
Summary: long double%intmax_t errors, long double%double
errors.
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jmichae3 at yahoo dot com
Target Milestone: ---
disk-refresh.cpp:491:44: error: invalid operands of types 'long double' and
'long double' to binary 'operator%'
intmax_t month=(365.24224*24*60^60*1000/(std::abs(n%365.24224)/12))+1;//days
per month
~^~~~~~~~~~~~~~~
?
int seems to be an int-only op now. this is surely not according to spec.
the implicit type conversions should be there.
#include <cstdint>
int main(void)
intmax_t i2=2,i3=3;
long double ld4=5,ld5=5;
long double
dresult1=i2%ld4,dresult2=ld4%i2,dresult3=ld4%ld5,dresult4=i2%i3;
intmax_t
iresult1=i2%ld4,iresult2=ld4%i2,iresult3=ld4%ld5,iresult4=i2%i3;
//if this works, it's because the optimizer blew the code away
return 0;
the above is the invalid error message I get from gcc 6.2.0
this is basic math that's failing.
Tue 12/27/2016 14:53:15.53 L:\projects\disk-refresh\1.1\win\test>g++
-opctop.exe pctop.cpp
pctop.cpp: In function 'int main()':
pctop.cpp:6:12: error: invalid operands of types 'intmax_t {aka long long int}'
and 'long double' to binary 'operator%'
dresult1=i2%ld4,
~~^~~~
pctop.cpp:11:12: error: invalid operands of types 'intmax_t {aka long long
int}' and 'long double' to binary 'operator%'
iresult1=i2%ld4,
~~^~~~
Tue 12/27/2016 14:55:22.90 L:\projects\disk-refresh\1.1\win\test>gcc --version
gcc (i686-win32-sjlj-rev1, Built by MinGW-W64 project) 6.2.0
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Tue 12/27/2016 14:56:46.14 L:\projects\disk-refresh\1.1\win\test>