次のように定義された構造体があります。
struct A : public B, public C
{
    A(const B& b) : B(b), C()
    {}
    template<typename... Args>
    A(Args&&... args) : B(), C(std::forward<Args>(args)...)
    {}
};
int main()
{
   B b;
   A sample1(b);
   A sample2(3); // For example, B has a B(int) constructor.
}
そして、これはうまくいきA(b)ませBんB(A&).
moveさらに、 B のコンストラクターを追加したい:
struct A : public B, public C
{
    A(const B& b) : B(b), C()
    {}
    A(B&& b) : B(std::move(b)), C()
    {}
    template<typename... Args>
    A(Args&&... args) : B(), C(std::forward<Args>(args)...)
    {}
};
最後のステップは、最初の 2 つのコンストラクターを融合することです。
struct A : public B, public C
{
   template<typename fw_B>
   A(fw_B&& b) : B(std::forward<fw_B>(b)), C()
   {}
   template<typename... Args>
   A(Args&&... args) : B(), C(std::forward<Args>(args)...)
   {}
 };
質問: 最初のバージョンが衝突を引き起こした場合、最後のバージョン (私の最終的な目的) も機能しないことは明らかです。どうすればこの目標を達成できますか?