今日遭遇したバグ

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19809

このバグはVCの以下のバグについて調査しているときに遭遇

template  class foo
{
    template friend void prod(const foo&);
};

template  void prod(const foo&s) { }

int main()
{
    foo<4> x;
    prod(x);
    return 0;
}

以下、回避策

template  class foo
{
    static const int value=N; // prod内でNを使うために必要
    template friend void prod(const M&);
};

template  void prod(const N&s) { }

int main()
{
    foo<4> x;
    prod(x);
    return 0;
}

friendの範囲が少し広くなるが、まあ、しょうがない。