Чуть было не наступил на грабли
Есть код вида
#include <iostream>
#include <vector>
class TVAR
{
public:
TVAR(bool /*v*/) {std::cout << "TVAR: bool\n";}
TVAR(const char* /*v*/) {std::cout << "TVAR: const char*\n";}
TVAR(const std::string& /*v*/) {std::cout << "TVAR: std::string\n";}
};
int main()
{
std::vector<TVAR> vec;
vec.push_back("1234");
}
Работает как ожидается — push_back вызывает конструктор TVAR(const char*).
Решил его "улучшить" и заменить конструкторы TVAR(const char*) и TVAR(const std::string&) на унифицированный конструктор TVAR(const std::string_view&).
#include <iostream>
#include <vector>
class TVAR
{
public:
TVAR(bool /*v*/) {std::cout << "TVAR: bool\n";}
TVAR(const std::string_view& /*v*/) {std::cout << "TVAR: std::string_view\n";}
};
int main()
{
std::vector<TVAR> vec;
vec.push_back("1234");
}
И огрёб, потому что начал вызываться конструктор TVAR(bool)
Реально стрёмно.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --