This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 115e. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2024-11-11
Even though a function cannot take a parameter of type void, the current rules for overload resolution require consideration of overloaded operators when one operand has a user-defined or enumeration type and the other has type void. This can result in side effects and possibly errors, for example:
template <class T> struct A { T t; typedef T type; }; struct X { typedef A<void> type; }; template <class T> void operator ,(typename T::type::type, T) {} int main() { X(), void(); // OK void(), X(); // error: A<void> is instantiated with a field of // type void }