Почему невозможно иметь ссылку на void? Единственное, что я нашел в стандарте С++, - это строка, 8.3.2.1
Декларатор, который указывает тип "ссылка на cv void", плохо сформирован.
Почему так? Почему я не могу написать "общую" функцию, которая принимает void&
?
Просто, чтобы быть ясным, у меня нет полезного приложения, в котором использование ссылки на void может быть лучше, чем использование шаблонов, но мне просто интересно узнать, как запретить эту конструкцию.
Чтобы немного разъяснить, я понимаю, что использование ссылки-на-void "как есть" было бы бессмысленным, как разыменование указателя на пустоту. Однако, чтобы использовать его, я мог бы использовать его для ссылки-на-sometype, не так ли? На самом деле, я не понимаю, почему следующий фрагмент может работать...
void foo(void *data)
{
int *i = reinterpret_cast<int*>(data);
// do something with i
}
... пока этого не может:
void foo(void &data)
{
int &i = reinterpret_cast<int&>(data);
// do something with i
}