В некоторых случаях, см. Один пример ниже, std::is_floating_point возвращает false для float.
#include <iostream>
#include <type_traits>
#include <vector>
int main()
{
::std::cout << typeid(decltype(::std::vector< float >()[::std::vector< float >().size()])).name() << ::std::endl;
if (::std::is_floating_point< decltype(::std::vector< float >()[::std::vector< float >().size()]) >::value)
{
::std::cout << "floating point" << ::std::endl;
}
else
{
::std::cout << "not floating point" << ::std::endl;
}
return 0;
}
Выход из GCC
f
not floating point
В этом примере можно видеть, что typeid рассматривает ::std::vector< float >()[::std::vector< float >().size()] как float поскольку возвращает правильное имя. Также можно проверить, что typeid(decltype(::std::vector< float >()[::std::vector< float >().size()])) == typeid(flat) возвращает true. Однако std::is_floating_point возвращает false. Зачем? Это ошибка от C++?
FYI, я проверил как с GCC, так и с VisualStudio. В этом примере я использовал std :: vector, но можно также попробовать другие библиотеки, такие как Eigen.