После наблюдения этого вопроса возникло следующее замечание о различиях char[]
и char*
.
#include <iostream>
typedef char ar[];
typedef char* pr;
void f2(ar x, pr y)
{
std::cout << std::is_same<decltype(x), decltype(y)>::value << '\n';
std::cout << std::is_same<ar, pr>::value << '\n';
}
int main()
{
char data[] = "data";
char *ptr = data;
f2(data,ptr);
return 0;
}
Вывод (на Apple LLVM версии 4.2 (clang-425.0.28))
1
0
Почему данные относятся к разным типам, но не отличаются от decltype()
? Мое подозрение в том, что они действительно разные типы из-за их объявлений typedef
, но тогда почему переменные сообщаются как один и тот же тип?