xem xét mã:Có pháp lý để phần chuyên variadic mẫu lớp bên trong với args từ mẫu variadic của một lớp bên ngoài
#include <iostream>
template <class... Ts>
struct outer {
template <class... ITs>
struct inner {
static constexpr bool value = false;
};
template <class... ITs>
struct inner<Ts..., ITs...> {
static constexpr bool value = true;
};
};
int main() {
std::cout << outer<int, float, double>::inner<int, float, double, int>::value << std::endl;
}
mã biên dịch với kêu vang ++ nhưng không phải với g ++ nơi nó tạo ra một lỗi:
temp3.cc:11:11: error: parameter pack argument ‘Ts ...’ must be at the end of the template argument list
struct inner<Ts..., ITs...> { ^
Vì tôi đã thiết lập here chuyên môn hóa một phần của lớp bên trong nên hợp pháp.
Edit: Đối với đầy đủ nó là giá trị thêm rằng kêu vang cho mã trên cảnh báo rằng ông có thể có một vấn đề với suy luận thông số nào được nêu ra làm việc đó mà không cần bất kỳ vấn đề ...
Tôi không biết chính xác quy tắc, nhưng khi tôi gặp lỗi với loại phụ thuộc, hãy thêm 'typename' hoặc' template' trước khi nó giúp. Hãy thử 'struct inner
Dani
sau khi thêm 'typename' Tôi nhận được' temp3.cc:11:39: lỗi: đối số mẫu 1 không hợp lệ' –
Cần lưu ý rằng kịch bản được yêu cầu vẫn có thể được thực hiện với một số mẫu siêu lập trình bổ sung ... http://coliru.stacked-crooked.com/a/0c6c643c8ff5809e (vâng, tôi biết đó không phải là câu hỏi nhưng thách thức của việc thực hiện nó là không thể tránh khỏi ...). –