Конструкцию void()
можно использовать для «создания значения типа void
» (странно, но факт). Но синтаксис инициализации C++11+ с фигурными скобками в таком случае не работает:
int f_int_parenthesis()
{
return int(); // OK
}
int f_int_braces()
{
return int{}; // OK
}
void f_void_parenthesis()
{
return void(); // OK
}
void f_void_braces()
{
return void{}; // error
}
Компилируемость кода проверена с помощью g++ 7.2.0 и clang++ 3.8.0 (флаги компиляции -std=c++14 -Wall -Wextra -Werror -pedantic-errors -O0
).
Почему это так? Это стандартное поведение?
void
.. - person txtechhelp   schedule 27.10.2017void()
позволяет типvoid{}
, поэтому ошибка. - person txtechhelp   schedule 27.10.2017void{}
не является ни допустимым типом, ни допустимым выражением. - person skypjack   schedule 27.10.2017void{}
скоро должно стать законным: stackoverflow.com/a/53267943/27678 - person AndyG   schedule 14.12.2018