Почему CTAD выводит S (не S ) и разрешает Auto s2 = s {"hi"};?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему CTAD выводит S (не S ) и разрешает Auto s2 = s {"hi"};?

Сообщение Anonymous »

Я исследую вычет аргумента шаблона класса (CTAD) для заполнителя с элементом массива при инициативе из строкового буквального. < /p>

Код: Выделить всё

#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 .

[*] для s2:

[*] для s2:

[*] для s2:

[*] для s2:

[*]

Подробнее здесь: https://stackoverflow.com/questions/796 ... uto-s2-shi
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему CTAD выводит S (не S ) и разрешает Auto s2 = s {"hi"};?
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Почему CTAD выводит S (не S ) и разрешает Auto s2 = s {"hi"};?
    Anonymous » » в форуме C++
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Почему CTAD выводит S (не S ) и разрешает Auto s2 = s {"hi"};?
    Anonymous » » в форуме C++
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Почему CTAD выводит S (не S ) и разрешает Auto s2 = s {"hi"};?
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Почему CTAD выводит S (не S ) и разрешает Auto s2 = s {"hi"};?
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»