Агрегировать с инициализацией в классе - в качестве аргумента по умолчанию

Следующий код не компилируется (GCC, clang):

struct outer {
    struct inner {
        int i = 1;
        int j = 2;
    };
    void foo (const 
        inner& param = 
        inner{}) const {}
};

int main() {
    outer{}.foo();
}

Однако добавление конструктора по умолчанию (с реализацией) в inner решает проблему. Перемещение inner в область пространства имен также помогает.

В чем проблема? Буду признателен за ссылки на стандарт.


person Igor R.    schedule 26.09.2019    source источник
comment
Вы уверены, что строите в режиме С++ 17? В C++11 структуры с встроенной инициализацией членов были не агрегатами. Это было удалено в С++ 14. См., например. Подробности см. в этом справочнике по инициализации агрегатов. Или, может быть, это ошибка в компиляторах? Вы пробовали, например. MSVC++ (для этого подойдет проводник компилятора)?   -  person Some programmer dude    schedule 26.09.2019
comment
И какую ошибку вы получаете? Пожалуйста, укажите точный, полный и полный вывод ошибок в вопросе.   -  person Some programmer dude    schedule 26.09.2019
comment
@ Какой-то программист, чувак, я считаю, что sscce достаточно;). И спасибо за ссылку на дубликат, не смог найти   -  person Igor R.    schedule 26.09.2019
comment
@ИгорьР. Это я пометил дубликат.   -  person Language Lawyer    schedule 26.09.2019