SSCCE của vấn đề của tôi là:lớp Nested mẫu với con trỏ-to-phương pháp không được biên dịch trong vang ++
template <class T> class MyClass
{
template <void (MyClass::*M)() const> struct wrapper
{
virtual void call();
};
};
template <typename T>
template <void (MyClass<T>::*M)() const>
void MyClass<T>::wrapper<M>::call()
{
}
Mã này được biên soạn trong gcc nhưng thất bại với lỗi:
error: nested name specifier 'MyClass<T>::wrapper<M>::' for declaration does not refer into a class, class template or class template partial specialization
void MyClass<T>::wrapper<M>::call()
~~~~~~~~~~~~~~~~~~~~~~~~~^
trong vang ++. Tại sao?
Trong lớp học gọi định nghĩa giải quyết được sự cố, tôi biết. Bất kỳ mẫu không trỏ tới phương thức nào cũng hoạt động tốt ở mọi nơi. Thử nghiệm với mẫu/tên tệp không có kết quả.
Dường như không ai trên SO biết câu trả lời, vì vậy có thể bạn có thể gửi lỗi Clang và sau đó đăng ở đây nếu bạn nhận được phản hồi. – Brian
@Brian, OK. https://llvm.org/bugs/show_bug.cgi?id=24357 Đang chờ ... – dyomas
SSCCE của bạn thiếu các công tắc dòng lệnh và số phiên bản. – kfsone