c++ - Why is digits10 for reference to integer type 0? -


the following code:

#include <iostream> #include <limits> #include <cstdint>  int main()  {     std::cout << std::numeric_limits<std::uint64_t>::digits10 << "\n"                << std::numeric_limits<std::uint64_t&>::digits10 << "\n"; } 

outputs

19
0

i expect std::uint64_t& have same value std::uint64_t: there reason discrepancy?

18.3.2.1/2:

specializations shall provided each arithmetic type, both floating point , integer, including bool. member is_specialized shall true such specializations of numeric_limits.

so know specializations exist for these non-reference types. 18.3.2.3/1:

the default numeric_limits template shall have members, 0 or false values.

i suspect done way because can static_assert on is_specialized force compile error, there possibly template application 0 ok default value 1 or more of limits. if want able test references run through std::remove_reference.

i'm not sure if it's legal specialize numeric_limits own types. standard in 18.3.2.1/4 says:

non-arithmetic standard types, such complex (26.4.2), shall not have specializations.

i read qute "the standard not provide specializations non-arithmetic standard libray types, it's legal specialize user type". read totally forbidding non-provided specializations.


Comments

Popular posts from this blog

tcpdump - How to check if server received packet (acknowledged) -