У меня есть вопрос о реализации std::remove_extent
(Visual Studio 11)C++, что является типом T [] в специализации шаблона
template<class _Ty>
struct remove_extent
{
typedef _Ty type;
};
template<class _Ty, unsigned int _Ix>
struct remove_extent<_Ty[_Ix]>
{
typedef _Ty type;
};
template<class _Ty>
struct remove_extent<_Ty[]> //what for?
{
typedef _Ty type;
};
Я просто попытался это: std::cout << typeid(int[]).name() << '\n';
и выход : int [0]
, поэтому я полагаю _Ty[]
означает _Ty[0]
.
но какая цель специализации для _T[0]
, я думаю, что для этого был обработан второй случай.
Кроме того, я действительно сомневаюсь, что если T [0]
является допустимым типом, если да, то в каком случае вы можете использовать это?
'T [0]' не является допустимым типом, поэтому имя коверкая грамматику на вашей платформе повторно использовал свое имя динамического типа для представления 'T []'. – Potatoswatter