void{} vs void() в качестве инициализатора void

Конструкцию 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).

Почему это так? Это стандартное поведение?


person Constructor    schedule 27.10.2017    source источник
comment
Это может помочь неоднозначности типа void..   -  person txtechhelp    schedule 27.10.2017
comment
@txtechhelp Что ты имеешь в виду?   -  person Constructor    schedule 27.10.2017
comment
Ответы объясняют немного больше со ссылками на стандарт, по сути, void() позволяет тип void{}, поэтому ошибка.   -  person txtechhelp    schedule 27.10.2017
comment
void{} скоро должно стать законным: stackoverflow.com/a/53267943/27678   -  person AndyG    schedule 14.12.2018
comment
@AndyG Отлично! :-) Спасибо.   -  person Constructor    schedule 14.12.2018