プログラムで可変個引数テンプレートを使用していましたが、予期しないエラーが発生しました。エラーを特定し、ショックを与えました。
#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;
}
「#includeiostream」の行を削除すると、ソースは正常にコンパイルされます。ただし、この行を入力すると、コンパイラはエラーをスローします。
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 ++(Ubuntu / Linaro 4.7.2-11precise2)4.7.2そして私はこのフラグでコンパイルしています:g++ -Wall -pedantic -std=c++11 prov.cpp -o prov
コンパイラがこのエラーをスローする理由がわかりません。バグの可能性はありますか?