Я пытаюсь понять природу распада типа. Например, все мы знаем, что в определенном контексте распад массивов в указатели. Моя попытка понять, как int[]
приравнивается к int*
, но как двумерные массивы не соответствуют ожидаемому типу указателя. Вот тестовый пример:
std::is_same<int*, std::decay<int[]>::type>::value; // true
Возвращает true, как ожидалось, но это не так:
std::is_same<int**, std::decay<int[][1]>::type>::value; // false
Почему это не так? Я, наконец, нашел способ заставить его возвращать true, и это было сделано при указании первого измерения указателем:
std::is_same<int**, std::decay<int*[]>::type>::value; // true
И утверждение верно для любого типа с указателями, но с последним, являющимся массивом. Например (int***[] == int****; // true
).
Могу ли я объяснить, почему это происходит? Почему типы массивов не соответствуют типам указателей, как и ожидалось?