프로그램에서 가변 템플릿을 사용하고 있는데 예기치 않은 오류가 발생했습니다. 나는 오류를 격리하고 나는 그것을 충격을했습니다 당신이 선 "#INCLUDE iostream"를 삭제하면가변 템플릿이있는 희귀 버그?
#include<cctype>
#include<iostream> // try to delete this line
class A
{
public:
void constructor()
{ }
template<typename... Args>
void constructor(int (*f)(int), Args... args)
{
// process(f)
constructor(args...);
}
template<typename... Args>
A(Args... args)
{
constructor(args...);
}
};
int main()
{
A a;
a.constructor(std::isspace); // ok
A b(std::isspace); // error
return 0;
}
가, 소스가 확실히 컴파일됩니다.
prov.cpp: In function ‘int main()’:
prov.cpp:32:22: error: no matching function for call to ‘A::A(<unresolved overloaded function type>)’
prov.cpp:32:22: note: candidates are:
prov.cpp:18:7: note: A::A(Args ...) [with Args = {}]
prov.cpp:18:7: note: candidate expects 0 arguments, 1 provided
prov.cpp:4:7: note: constexpr A::A(const A&)
prov.cpp:4:7: note: no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘const A&’
prov.cpp:4:7: note: constexpr A::A(A&&)
prov.cpp:4:7: note: no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘A&&’
나는이 g ++ 버전을 사용하고 있습니다 :이 라인을 넣어 경우, 컴파일러에서 오류 던져 g를 ++ (4.7.2-11precise2/리나 우분투) 4.7.2 나는 컴파일하고있어 이 플래그 : g++ -Wall -pedantic -std=c++11 prov.cpp -o prov
왜 컴파일러가이 오류를 throw하는지 이해가 가지 않습니다. 가능한 버그입니까?
오버로드 된 함수를 제공합니다. 컴파일러는 원하는 std :: isspace 중에서 과부하를 선택해야합니까? – PlasmaHH
왜 즉시 컴파일러 버그라고 가정합니까? 그것은 대단히 확신합니다 ... –
나는 그것이 컴파일러 버그라고 가정하지 않습니다. 제목에서 나는 의문문을 사용했고 포스트 i에서는 가능한 버그인지 궁금합니다. – xgbuils