tôi biên dịch mã này với GCC (4.2.1 của Apple xây dựng 5664)định nghĩa mơ hồ của nhà điều hành() với đa kế thừa
#include <cstddef>
using std::size_t;
template <char I> struct index { };
struct a
{
void operator()(size_t const &) { }
};
struct b
{
template <char I>
void operator()(index<I> const &) { }
};
struct c: public a, public b { };
int main (int argc, char const *argv[])
{
c vc;
vc(1);
return 0;
}
và cung cấp cho tôi những lỗi sau:
main.cpp: In function ‘int main(int, const char**)’:
main.cpp:22: error: request for member ‘operator()’ is ambiguous
main.cpp:14: error: candidates are: template<char I> void b::operator()(const index<I>&)
main.cpp:9: error: void a::operator()(const size_t&)
I don' t hiểu lý do tại sao mã này không rõ ràng; hai phương thức có chữ ký khác nhau.
Tôi ngạc nhiên rằng Clang có thể biên dịch mã của bạn, trong khi GCC phàn nàn. – peoro