Код: Выделить всё
#include
#include
template
struct S {
T t[3];
/*
aggregate deduction candidate:
template
S(const T(&)[3]) -> S;
*/
};
int main() {
auto s1 = S{{"hi"}}; // I expected decltype(s1) == S
static_assert(std::is_same_v); // passes
auto s2 = S{"hi"}; // I expected this to be a compilation error
auto s3 = S{"hi"}; // OK: prints "hi"
auto s4 = S{{"hi"}}; // OK: prints "hi"
}
< /code>
кавычки с cppreference.com < /p>
let e i < /sub> быть (возможно, рекурсивным) элементом агрегата, который будет инициализирован из списка Arg> < /sub>, где < /p>
< /blockquote>
storque-storque-sub> rv-sub> sub> rv-sub> rv-sub> rv-sub> rv-sub> . Объявленный тип e i < /sub>. < /p>
< /blockquote>
< /blockquote>
рентабельная элиция не рассматривается ни для одного элемента агрегата, который имеет < /p>
тип Array с помощью Sub sub -sub> arg < /> < />
. Literal
[b] Что я ожидал [/b]
[list]
[*] для s1:
e₁ является t По второй цитате T₁ должен быть const t (&) [3] .
Так что я ожидал, что ctad выведет t = char .
[*] для s2:
[*] для s2:
[*] для s2:
[*] для s2:
[*]
Подробнее здесь: https://stackoverflow.com/questions/796 ... uto-s2-shi