제 컴파일러 gcc-4.6에 따르면 아래 예제에서 func을 호출하는 것은 불분명합니다.모호한 호출 (char *에서 lambda 대 std :: string으로의 변환)
void func(const std::string &str) {
}
void func(std::function<std::string()> f) {
}
void test() {
func("Hello");
}
컴파일러가이 말을 올바르게 사용합니까? 첫 번째 오버로드를 제거하면 관련 템플릿을 인스턴스화하지 못하기 때문에이 코드가 컴파일되지 않습니다.
두 함수 중 하나의 이름을 바꾸거나 std :: string으로 명시 적으로 변환하여이 문제를 해결할 수 있습니까?
어색해 보입니다. –
@Tomalak : 그렇습니다. – Puppy
구현을 허용할지 여부는 확실하지 않습니다. 누군가가 스펙 참조를 찾거나 더 설명 할 수 있다면 기쁠 것입니다. –