C++のオーバーロード解決について質問です。左辺値と右辺値参照の差のみしか存在しない関数は区別されませんか?
例えば以下のようなコードです
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)){/* 処理 */}
};