Consider the following code -
#include <variant>
#include <string>
int p(std::variant<bool, std::string> v) {
return v.index();
}
int main() {
return p("ad");
}
instead of choosing std::string
, p will be instantiated with variant containing bool
(I want std::string
), well this can be fixed using explicitly specifying std::string
but that is too much work 😊, I tried providing different overloads but it doesn't seem to work.
Such code:
#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
.