例えば以下のようなコードです

class hoge{
    std::vector<int> val;
    hoge(std::vector<int> val) : hoge(std::move(val)){}
    hoge(std::vector<int> && val) : val(std::move(val)){/* 処理 */}
};

以上のコードをgcc(g++ -std=c++17)でコンパイルした所エラーとなりました。
このような関数はオーバーロード解決できないのでしょうか?

また、余談ではありますが、代替として以下のような実装を考えています。
このような実装を代替として用いるのは正しいでしょうか?

class hoge{
    std::vector<int> val;
    hoge(const std::vector<int> & val) : hoge(std::move(std::vector(val))){}
    hoge(std::vector<int> && val) : val(std::move(val)){/* 処理 */}
};