От: Можно ли перегрузить char * и std::string?
#include <string>
#include <iostream>
void foo(std::string str) {
std::cout << "std::string\n";
}
void foo(char* str) {
std::cout << "char*\n";
}
int main(int argc, char *argv[]) {
foo("Hello");
}
Вышеприведенный код печатает "char *" при компиляции с помощью g++-4.9.0 -ansi -pedantic -std=c++11
.
Я считаю, что это неверно, потому что тип строкового литерала является "массивом n const char
", и с ним не должно быть возможности инициализировать не const
char*
, поэтому std::string
следует выбрать перегрузку. Является ли gcc нарушением стандарта здесь?