#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 [3] e₁ e₁ e₁ ar Argr₁ "HI" .
По второй цитате T₁ должен быть const t (&) [3] .
Так что я ожидал, что ctad выведет t = char .
Я исследую вычет аргумента шаблона класса (CTAD) для заполнителя с элементом массива при инициативе из строкового буквального. < /p> [code]#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 [/code] (тип t [3] e₁ e₁ e₁ ar Argr₁ "HI" . По второй цитате T₁ должен быть const t (&) [3] . Так что я ожидал, что ctad выведет t = char .