Здравствуйте, Sni4ok, Вы писали:
S>S>void foo(double); // 1
S>void foo(char*); // 2
S>int main(){
S>foo(false); //*
S>foo(true); //**
S>bool b = false;
S>foo(b); //***
S>}
S>
S>в случае (**) и (***) выбирается функция 1
S>в случае (*) выдаёт ошибку, что не может выбрать перегруженную функцию
(**) — вроде всё понятно...
(***) — foo((bool)0) — неявно приводится к double
(*) — нулевой указатель или double(0)?! вот те и UB
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>