[cfe-dev] Visibility of inline defined friend template function

Richard Smith richard at metafoo.co.uk
Tue Jul 9 13:17:43 PDT 2013


On Tue, Jul 9, 2013 at 8:38 AM, Will Wilson <will at indefiant.com> wrote:
> Hi All,
>
> A quick question regarding correct behaviour:
>
> class Vec3 {
> public:
> friend void DoA(Vec3& a) {
> a.m_int = 1;
> }
>
> template <const bool B>
> friend void DoT(Vec3& a) {
> if (B)
> a.m_int = 2;
> }
> private:
> int m_int;
> };
>
> void test_friend_functions_inline() {
> Vec3 a;
> DoA(a);
> DoT<true>(a);  // error: use of undeclared identifier 'DoT'

Lookup of DoT here finds nothing, so this is parsed as a comparison
rather than as a template. EDG rejects this in its strict mode.

See [temp.arg.explicit]p8, which has almost exactly this case as an example.



More information about the cfe-dev mailing list