Size: a a a

2020 May 04

CD

Constantine Drozdov in pro.cxx
Alex
Похоже, не нужна, раз MSVC вообще её не выполняет и хорошо себя чувствует
MSVC использует совершенно другой способ инстанцирования шаблонов без включенного Zc:twoPhase. Вы знаете, как избегать нарушений ODR в MSVC способе?
источник

CD

Constantine Drozdov in pro.cxx
Для MSVC в этом режиме шаблон это форма макроса
источник

CD

Constantine Drozdov in pro.cxx
Он вообще не компилирует его при проходе
источник

A

Alex in pro.cxx
я знаю, что в 100% случаев, когда компилятор требовал от меня писать this->, это выглядело тупо и бессмысленно
источник

A

Alex in pro.cxx
Constantine Drozdov
Для MSVC в этом режиме шаблон это форма макроса
это похоже на более правильный подход
источник

CD

Constantine Drozdov in pro.cxx
Alex
это похоже на более правильный подход
в котором любое изменение результата лукапа кодом после шаблона - ODR violation?
источник

A

Alex in pro.cxx
можете пояснить?
источник

CD

Constantine Drozdov in pro.cxx
Alex
можете пояснить?
да, шаблон обязан инстанцироваться одинаково независимо от TU. Если один из TU случайно добавит функцию, которая повлияет на последующее инстанцирование...
источник

CD

Constantine Drozdov in pro.cxx
Alex
можете пояснить?
//some.cpp
bool operator < (vector<bool>, vector<bool>) { /***/}
void some(vector<vector<bool>> & arg) {
  std::sort(arg.begin(), arg.end()); //IFNDR в MSVC шаблонах
}
источник

A

Alex in pro.cxx
Понял, мне кажется очень странным это требование, я бы ожидал от шаблона, что он как раз-таки зависит от контекста в точке инстанциирования.

Смутно припоминаю, что шаблоны могут линковаться между TU, это используется для инстанциирования и экспорта шаблонов из DLL, но это довольно странное решение. Если так прописано в стандарте, то мне стало немного понятнее, спасибо.
источник

CD

Constantine Drozdov in pro.cxx
Alex
Понял, мне кажется очень странным это требование, я бы ожидал от шаблона, что он как раз-таки зависит от контекста в точке инстанциирования.

Смутно припоминаю, что шаблоны могут линковаться между TU, это используется для инстанциирования и экспорта шаблонов из DLL, но это довольно странное решение. Если так прописано в стандарте, то мне стало немного понятнее, спасибо.
Я уверен, что можно найти материалы дискуссий 2003 года, когда twoPhase был принят в стандарт; кажется, ниблоиды полностью закрывают основную претензию к twoPhase, так что комитет не ошибся ;)
источник

A

Alex in pro.cxx
какая основная претензия? Что-то про кастомизацию?
источник

CD

Constantine Drozdov in pro.cxx
qualified call to customization point
источник

M

Mr_ChAI in pro.cxx
Sergey Skvortsov
В требованиях для аллокатора A<T> есть конструктор копирования от соответствующего A<U> для любого U

См. std::allocator_traits::rebind_alloc
Чет не нашел, как им пользоваться?
источник

A

Alex in pro.cxx
значит, в любом проекте, который успешно собирается и работает под MSVC, первая фаза не нужна и только создаёт проблемы для программиста и уродует исходный код?
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Mr_ChAI
Т.е. std::list<int, std::allocator<int>> вместо какого-нибудь std::list<int, std::allocator<__list_node<int>>>
Чтобы не даввть доступ к __list_node. Для этого есть rebind
источник

M

Mr_ChAI in pro.cxx
Если я пишу свой list, стоит ли в нем использовать умные указатели?
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Да
источник

M

Mr_ChAI in pro.cxx
Тогда другой вопрос
источник

M

Mr_ChAI in pro.cxx
Как себя ведет shared_ptr с nullptr?
источник