If you mistakenly do something like:
#include<limits>
int arr[3];
auto x = std::numeric_limits<decltype(arr[0])>::max();
You will get unhelpful error message from the file in the STL implementation.
Problem is that template argument is a reference, so the fix is to remove it:
auto x = std::numeric_limits<std::remove_reference_t<decltype(arr[0])>>::max();
Now my question is why numeric_limits
do not know to do this by themselves?
I would understand that you do not want to remove pointerness(since max
of char
pointer and max
of char
are very very different things), but I would assume that whenever you have a reference as an argument to numeric_limits
you would be happy with result that is obtained by removing it.