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

Prefer std::string in std::variant<bool, std::string> for const char *

考虑以下代码 -

#include <variant>
#include <string>

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

int main() {
    return p("ad");
}

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

这样的代码:

#include <variant>
#include <string>

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

template<size_t N>
int p(const char (&s)[N]) {
    return p(std::string(s));
}

int main() {
    return p("ad");
}

returns 1.

您可以使用 string literal suffix s 直接创建一个 std::string 对象

return p("ad"s);

如果后缀不可用,则需要添加 using namespace std::literalsusing namespace std::string_literalsusing namespace std::literals::string_literals

就是说,我已经在 Wandboxp("ad") returns 上试过你的代码

1

这已在 C++20 中修复。有关此确切案例的讨论,请参阅 P0608