Size: a a a

2021 July 02

АК

Александр Караев... in supapro.cxx
template<typename T>
std::ostream& operator<<(std::ostream& out, const Vector3D<T>& other)
{
 out << "x := " << other.x;
}
источник

AS

Ansa Sequence in supapro.cxx
Его значит не нужно описывать, как часть класса vector3d<t>?
источник

F

Free in supapro.cxx
а что делать когда при символьном считываение с файла char игнорирует пробелы
источник

AS

Ansa Sequence in supapro.cxx
Сделал так, как ты сказал :

Ошибка :
Severity  Code  Description  Project  File  Line  Suppression State
Error  LNK2019  unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,struct Vector3D<int> const &)" (??6@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AEAV01@AEBU?$Vector3D@H@@@Z) referenced in function main  D:\ASGraphic\out\build\x64-Debug\ASGraphic  D:\ASGraphic\out\build\x64-Debug\main.cpp.obj  1
источник

АК

Александр Караев... in supapro.cxx
В хедере оператор описан внутри класса или вне?
источник

AS

Ansa Sequence in supapro.cxx
Сигнатура оператора внутри класса
источник

AS

Ansa Sequence in supapro.cxx
Реализация вне
источник

АК

Александр Караев... in supapro.cxx
std::ostream& operator<<(std::ostream& out, const Vector3D<T>& other);
Если это внутри класса, не хватает friend
источник

AS

Ansa Sequence in supapro.cxx
Также написал friend
источник

AS

Ansa Sequence in supapro.cxx
ostream operator не знает как инстанцировать любой тип шаблона?
источник

AS

Ansa Sequence in supapro.cxx
Или мне нужно лично каждый тип определить для вывода?
источник

AS

Ansa Sequence in supapro.cxx
Так как убрав шаблон и написав просто int, на месте <T> он решил работать, а так нет
источник

AS

Ansa Sequence in supapro.cxx
Всё, проблема исправлена
источник

AS

Ansa Sequence in supapro.cxx
Додумался до того, чтобы инстанцировать оператор, как шаблон
источник

AS

Ansa Sequence in supapro.cxx
friend std::ostream& operator<< <T> (std::ostream& out, const Vector3D<T>&);
источник

AS

Ansa Sequence in supapro.cxx
Боюсь того, что пишет @VoidStar0x0
источник

VD

Vlad Doc in supapro.cxx
источник

ДЖ

Дима Жигальов... in supapro.cxx
уснул на клавиатуре
источник

AS

Ansa Sequence in supapro.cxx
😅
источник

VS

Vlad Serebrennikov in supapro.cxx
если коротко, то не прав, на мой взгляд

если длинно, то (1) неявная инстанциация определения S<int> ведет к неявной инстанциации декларации шаблона operator[] на строке 13 (temp#inst-3.1). (2) далее вызов a[1] должен разрешиться в пользу декларации, инстанцированной из шаблона на строке 13 (temp#inst-10) (*), (3) что ведет к неявной инстанциации уже определения operator[] из того же шаблона (temp#inst-4), что (4) позволит компилятору вывести возвращаемый тип (dcl.spec.auto#general-12)

* в том, что это возможно при помощи одной лишь декларации без вывода возвращаемого типа, я убедился полнотекстовым поиском return, dedu, definition и placeholder по главе [over]

clang же ломается, как я понимаю, где-то между шагами 2 и 3, считая, что перегрузка не может разрешиться в функцию, возвращаемый тип которой не выведен, но он не может его вывести, пока не выберет ее и не инстанцирует определение

пошерстил CWG issues, но ничего не нашел. но там столько, что я вполне мог что-то упустить

меня сбило с толку, что этот шаблон на строке 13 одновременно и member template specialization (temp.expl.spec-15) с точки зрения класса, который для целей инстанциации определения класса является declared specialization (temp.spec#temp.expl.spec-1.9, temp.spec#temp.inst-1), но после нее становится обычным member function template, который требует неявной инстанциации всего.

еще я не нашел, что такое инстанциация, когда не указывается, инстанциация это декларации или же определения. буду рад, если кто-то докажет, что я слепой
источник