В некоторых случаях, см. Один пример ниже, 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 ++?
К вашему сведению, я проверил как GCC, так и VisualStudio. В этом примере я использовал std :: vector, но можно попробовать и с другими библиотеками, такими как Eigen.