Всегда ли происходит построение NTTP для CTAD, даже если задано значение типа этой специализации? [дубликат]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Всегда ли происходит построение NTTP для CTAD, даже если задано значение типа этой специализации? [дубликат]

Сообщение Anonymous »

Это (частично) уменьшено по сравнению с тем, что CTAD создает экземпляр другой специализации при указании явного аргумента.
https://godbolt.org/z/5To7nKEP3

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

template
struct Bar {
int n = N;
constexpr Bar() {}
constexpr Bar(const Bar& b): n{b.n - 1} {}
};

template constexpr int get_n() { return b.n; }

constexpr auto b = Bar{};
static_assert(b.n == 1);

#ifdef _MSC_VER
static_assert(get_n() == 1);
#else
static_assert(get_n() == 0);
#endif
Clang и GCC, кажется, всегда вызывают и выводят из конструктора(ов) Bar, чтобы определить реальный аргумент шаблона, даже если данный аргумент относится к типу специализации Bar, с чем MSVC не согласен.
Что говорит стандарт?

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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