7

usingテンプレートクラスからプライベートに派生している間、宣言にSFINAE (または別の手法) を使用できますか? 理解を深めるために、以下のコードを参照してください。

#include <iostream>

struct S1 {
    void f() { std::cout << "S1::f\n"; }
};

struct S2 {
    void f() { std::cout << "S2::f\n"; }
    void g() { std::cout << "S2::g\n"; }
};

template <class T>
struct D : private T {
    using T::f;
    // using T::g; // need this only if T provides g() function
};

int main() {
    D<S1>().f(); // ok. Prints 'S1::f'
    D<S2>().f(); // ok. Prints 'S2::f' 
    D<S2>().g(); // fail. But wants to be ok and prints 'S2::g'
    return 0;
}

どうすれば望ましい動作に到達できますか (可能な場合)?

4

2 に答える 2