在Visual Studio 2017中,通过展开每个参数包来调用基类成员失败

时间:2017-10-04 23:31:17

标签: c++ visual-c++ visual-studio-2017

请考虑以下代码:

class A
{
public:
    void GoImpl() { cout << "A"; }
};

class B
{
public:
    void GoImpl() { cout << "B"; }
};

template <class... Mixins>
class Foo : public Mixins...
{
public:
    void Go()
    {
        int temp[] = { 0, (Mixins::GoImpl(), 0)... };
    }
};

int main()
{
    Foo<A, B> foo;
    foo.Go();  // ERROR: illegal call of non-static member function

    return 0;
}

这在GCC或clang中编译得很好,但在Visual Studio 2017中失败了:

  

错误C2352:'A :: GoImpl':非静态成员函数的非法调用

我没有找到任何具体的信息。这只是编译器中的一个错误(或未实现的功能),还是有一些我错过的伏都教?你能建议任何解决方法吗?我特意试图在每个基类上调用基类函数。

1 个答案:

答案 0 :(得分:0)

作为解决方案,请尝试

PreparedStatement

    int temp[] = { 0, (this->Mixins::GoImpl(), 0)... };