小编u23*_*axe的帖子

operator []查找模板基类

以下代码给我们带来了一些麻烦:clangMSVC接受以下代码,而GCC拒绝它.我们相信海湾合作委员会这次是正确的,但我想在提交错误报告之前确定.那么,有什么特殊的operator[]查找规则我不知道吗?

struct X{};
struct Y{};

template<typename T>
struct B
{
    void f(X) { }
    void operator[](X){}
};

template<typename T>
struct C
{
    void f(Y) { }
    void operator[](Y){}
};

template<typename T> struct D : B<T>, C<T> {};

int main()
{
    D<float> d;
    //d.f(X()); //This is erroneous in all compilers
    d[Y()];//this is accepted by clang and MSVC
}
Run Code Online (Sandbox Code Playgroud)

那么上面的代码是否正确解析函数operator[]中的main调用?

c++ gcc clang visual-c++

26
推荐指数
2
解决办法
397
查看次数

标签 统计

c++ ×1

clang ×1

gcc ×1

visual-c++ ×1