From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonic308-18.consmr.mail.ir2.yahoo.com (sonic308-18.consmr.mail.ir2.yahoo.com [77.238.178.146]) by sourceware.org (Postfix) with ESMTPS id 57F0E383E684 for ; Sun, 22 May 2022 22:40:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 57F0E383E684 X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1653259242; bh=J3iFvcQMYvCyf7Ma2gtEA6qAkTkj5sRXvjbCrNGbiyY=; h=X-Sonic-MF:Date:From:To:Subject:From:Subject; b=MFWj6e7lZ5BYorKawj9xAdnC5D+Uj9fT/Nj1CXquI0+xKNlEMgb3X2Q6vJtYGLQkzrtBfjbsGmOdSwYsG5s5YQwAaFHQ9iVfo0PrMPVuIyJnp0w7nElvAv9J1yDph24qeP9I9TEl2GMAfhMcJSbQJoBz+ictV5OwiOcyvZ3+6dd4giElb34eQBP4gHpfj44Pfb2aMtpI4PahKutQY5rxK4w/ulKQtXgGfIgFfiKVPCfNOLeLHDf/TB12q54cOYv0AfkwbM31dICwuNCF0/2MxYhxsnEUfMbacCPqLQw0I35mPkjLBibMOdERCQFQ/UIJi6T6+cSLlz7W4F7xh79gSg== X-YMail-OSG: GTc6LQkVM1n.caKb4oJ.ZRvzrJiLSdTscMtK9xehzvulg6CbYfbBXlzkjh4tUCF eKVycQn0H6WuxcLzSz5uvEkNv9HvhesZXuml354CPpgDTdqgKBYJDaUf7JqqhxhkotRXrrJHUtXp Fwj7vPh3IXctrps6H3hIrL1H9IRbF9Rch_.b3Yv732uAKML13erPLtUm9WVvt5D2Hq9Yc1OFQ6K7 R4wtmp3PbQHDKEuqvUVS_lBPQevSIVViyTPCkYNEBBgjKYqr33ddMFeIKpE4r6d1znp7apJZp0xz bkKKagGSSUmSG0e_R_iBT7GE.4LNLhti7dZYmYiIGzFjYDgGpieFOOmle8fIe201ESE3UlpRJXIi W1Ub5ObuMVRVRrwpFDXbZZh860EE0X1v9ouH2KZETYDxaNjPJ8O4SJDuj9DBHuqEkm8vw7RJ6285 BsBwlmm4Er26eoKBBgWbIHMbgxiz37cY1BRDHLdMel0iI57FFGNLn7PJOgccqzSdWol39X4C5JmQ ADl5klSVEJPjVIyClosTDydeUG4.86_GP1.hPtJphyeKEQ_tsQ5TibJRJiADGavFaMwX.1XdzL0y hiK8RjowxwyxyDIM0S3sv5lkzo2F_eIY_3MbSJ8810eZs.bthiUkgCml0ff7Q8coj_3Ej.tkzU0I WIgzWbAUAGYM9KHdBUS4yP3.KqY9KzG06vd3b1zOIYQJmX51_hRUDnx.DB.6JMMFTIuyvTONi.LK sxXknyViQ91uqvAkuHh7U3ByKnyIxFwNdIeH_m.BzZsEegiP.LkWvjdo1GeK5InMyl4q.MV79F8J I.c4NL68eFCUVDfAUp9GoxclZ3DGjVeyp9uNFWDyUJWqyiMY._RecM9B3CKVvwhfg5HfHUd.jhAt 8vMmZPyf1Kdkzg5vDQL2CnMCsGJvq7Fj9_MI.UEtG3Dar8wR7Q5yoHvhIXOzhOJCWWz4npUNQPaS C2fFQdyHWutx8rnB.KH4OExlsvqrILFMe7Fg6XiPC87BO3avyjJBGSXkjPCxNRqwYPcQMpw2cn.3 zwHyd8W4znapKb0zrpCytDe4mL1reTTNds_iFEqXG7qpA9FFkMy59Scq_3718wFqhX8VuzeFNVnE joZTPI.rK6yq3DKTrd4Ewu6TPYnA873FQ5KkbY.fOnwXxf3UfGcjgs2G1U6rvyCLTzVMbVmNC_Tg aNDBoYMxotyQzE4aixNQ45OUDmvIJy3hSZ_sBGYCdu7NOu5r1099KUilxMSjD3CCaflckvdETqAP e6gKHBG3pR0aFA66nRvMksn.XRD5waqVrfLtunikgWOXGxB8o5f0XpeBIJC_DjV.tBlipHUJ4xzp 5npvqhlhx8pQKEKp3eGjBa0cnPpSosC.3r3by5H.0dcLssbKct4TLNOCNgu8jMfrDq1enlPWAJjX 05biJX4wF0BL.uKHa6prylwb1r7JkzL0ELWqCCKYD9Fqi3DL7HEslMal1OJ2UdXNcBmBivYT4r9n m_ipHj.lwT4bhETNAHodJsFgp8x6S_P9Ptqm_UuoZSYncJ66zLyj6JUcJyRpjtXB2tuRR_MaCc5L MdefaZN.2XBQSs5xjse0yJCJHrAiH1qEk7b_ObaNPT7g7q6dyeReTEnROepMRNmAwB1btgw41_HQ sduY._SbcaIRP1jbxdfCo1uQvz03Buhqfvgdm6fpyOMTIwLW1n_ruM_01zyUjoZrBbVJPV4lAiWx kla2nrayiJKLF5yfLEDibGhVf42SrQwkFfeEP8IlrimiI.UO8792ySLqDpfod5Is1_FGNpX4xOxa PRd7Af8RxoBRkU1oD5GHVmFGhtxGEHyqGwEiBFhGJnJHkO4Lz9wYE_YO8azPiSmcpmQ_AFyFrUhZ Zr2hc3kkDSil6X8..DyCM8.plbqPF_qR3QdihsxEZ_hZO8hRp8mA4cSRdpdrqRSkyPEAKEo6mGa3 CpznbK2S8WgAPsuS69HIlMbBpGxfvuEQek5sIVcQzEdMd8KOE0N7gbcd.gPo3qo406f_wDhCQ9zH OjP947So8BjV91C5EwEz7_1r_sQc6bxBtpeGcfRv01ab7EeUnEFISXNtLJbO6lNqWtA28UQGgdsH JNB7dO5Mh5fNTVqc7nFdCJch7UIE1tzar4hi7q2JiIJqoflrl.1xKapGXfBOqNSI47_rlURY_otk QmfJ1.5Lxum4iBv8fjXr7WHn81_vWEZFeqxfGyctwQ5u6SRcOL0E6LQdHwgDfYt9IDgowNb0KyFG NzX00Zrq7n.gZJxLcmXYURMWbnN0mOy_z0_jlGBJlCxhjPSiAPx7DnNHBDFCiBgv4sZiso72bYqJ 8EvPXWp9TTj0ULqG1GQ-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic308.consmr.mail.ir2.yahoo.com with HTTP; Sun, 22 May 2022 22:40:42 +0000 Date: Sun, 22 May 2022 22:40:18 +0000 (UTC) From: Klaus Lindemann To: Jonathan Wakely Cc: "gcc-help@gcc.gnu.org" Message-ID: <180050659.1310742.1653259218397@mail.yahoo.com> In-Reply-To: References: <786553971.2049625.1653240191948.ref@mail.yahoo.com> <786553971.2049625.1653240191948@mail.yahoo.com> Subject: Re: Question related to changes in template handling MIME-Version: 1.0 X-Mailer: WebService/1.1.20225 YMailNorrin X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: gcc-help@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-help mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 22 May 2022 22:40:45 -0000 Thanks, this clears things up (sorry for the botched formatting of the ori= ginal mail).This also explains why clang handles the code the same way as g= ++12. Regards Klaus Am Sonntag, 22. Mai 2022, 20:22:28 MESZ hat Jonathan Wakely Folgendes geschrieben: =20 =20 On Sun, 22 May 2022 at 18:25, Klaus Lindemann via Gcc-help wrote: > > Hello, > was the handling of templates changed for g++12? I've run across some pro= grams > which did compile with e.g. g++8, g++11, but no longer compile with g++12= . > The fix is quite easy, but I wonder if this change is a bug, or a more st= rict > implementation of the standard. > Here is a short example program:=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D// compiles with g++ 11, not g++ 12 > #include namespace NN=C2=A0 // if namespace is removed (i.e. glob= al namespace is used), problem does not occur{=C2=A0 class OStr {};} > template NN::OStr& operator<<(NN::OStr& lhs, const std::vector<= T>& rhs) { return lhs << rhs[0]; } > // moving this definition before the other template definition fixes gcc = 12 compile problemtemplate NN::OStr& operator<< (NN::OStr& lhs, c= onst T& rhs) { return lhs << rhs; } > int main(){=C2=A0 std::vector a;=C2=A0 NN::OStr os;=C2=A0 os << a;= =C2=A0 return 0;}=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D Reformatted so it's not illegible: #include namespace NN // if namespace is removed (i.e. global namespace is used), // problem does not occur { =C2=A0 class OStr {}; } template NN::OStr& operator<<(NN::OStr& lhs, const std::vector& rhs) { return lhs << rhs[0]; } // moving this definition before the other template definition // fixes gcc 12 compile problem template NN::OStr& operator<< (NN::OStr& lhs, const T& rhs) { return lhs << rhs; } int main(){ =C2=A0 std::vector a; =C2=A0 NN::OStr os; =C2=A0 os << a; =C2=A0 return 0; } GCC 12 is correct. Your code is wrong. In the expression lhs << rhs[0], name lookup is done for operator<< by considering the overloads already visible at that point, and overloads that can be found by ADL in the associated namespaces. The associated namespaces for OStr and int are NN, and there is no viable overload in namepace NN. An operator that is part of the API of NN::OStr should be defined in namespace NN, not the global namespace. If you define both your operator<< overloads in the same namespace as class OStr it will work. N.B. this lookup is consistent for the non-template case, because GCC 12 has been fixed to stop looking in the global namespace when that is not an associated namespace. =20