Консистентное поведение return в конструкторах

yuyoyuppe
yuyoyuppe

Пример кода:

void log(...) { }

void func(const bool v)
{
    if(v) return log();
}

struct S
{
    S(const bool v)
    {
        // works!
        if(v) return;

        // error: constructor 'S' must not return void expression
        //if(v) return log();
    }
};

Из текущего стандарта http://eel.is/c++draft/class.ctor#6:

A return statement in the body of a constructor shall not specify a return value.

1
рейтинг
core
3 комментария
Antervis

так это же ничего не дает. Конструкторы по определению не должны возвращать значение, поэтому return foo(); в конструкторах не имеет смысла даже если foo() возвращает void

Antervis
webreh

Antervis,
пример 1

if (condition) return InitPath1(); return InitPath2();

пример 2

const auto finish = [&] (int x) { value_ = x; };

if (condition) return finish(42);
return finish(0);
webreh
Обновлено 
Antervis

webreh, это всего лишь синтаксический сахар над

if (cond) {
    finish();
    return;
}

причем сахар для редкого юзкейса.

Antervis
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения