Tôi đã phát hiện ra rằng các đoạn mã sau:mẫu template đặc tả từng phần chỉ làm việc với -std = C++ 1Z với g ++
#include <iostream>
#include <vector>
template <typename T>
struct X : std::false_type {};
template <template <typename> class Y, typename U>
struct X<Y<U>> : std::true_type {};
int main() {
if (X<int>())
std::cout << "wrong\n";
if (X<std::vector<double>>())
std::cout << "correct\n";
return 0;
}
Chỉ in correct
khi biên soạn với g++-7
với -std=c++1z
. Các phiên bản khác của g++
, clang++
hoặc các cờ std
khác không đúng.
Đây có phải là lỗi của việc triển khai hiện tại và mã này không được in bất kỳ thứ gì hoặc có thay đổi gì trong C++ 17 khiến mã này hoạt động như tôi mong đợi không?
Thực tế thú vị: nếu bạn thực hiện 'Y' lấy một số đối số variadic, nó sẽ in' correct' cho clang trên '-std = C++ 1z' và không có gì cho gcc trên' -std = C++ 17 ':) – Rakete1111
Vẫn in' đúng' bằng 'g ++ - 7' ở đây .. – Svalorzen