更喜欢 std::variant<bool, std::string> 中的 std::string for const char *

jag*_*jun 4 c++ type-conversion variant implicit-conversion c++17

考虑以下代码 -

#include <variant>
#include <string>

int p(std::variant<bool, std::string> v) {
    return v.index();
}

int main() {
    return p("ad");
}
Run Code Online (Sandbox Code Playgroud)

而不是选择std::string, p 将使用包含bool(我想要std::string)的变体进行实例化,这可以使用显式指定来解决,std::string但这工作量太大,我尝试提供不同的重载,但似乎不起作用。

Mar*_*low 6

这已在 C++20 中修复。有关这种确切情况的讨论,请参见P0608