ฉันเจอปัญหานี้ในขณะที่พยายามชำนาญtuple_size
/ tuple_element
สำหรับคลาสที่กำหนดเองใน C ++ 17 สำหรับการโยงโครงสร้าง
โค้ดด้านล่างรวบรวมใน GCC แต่ไม่ใช่ในเสียงดังกราว (ทั้งรุ่นลำตัวดูที่ลิงค์ด้านล่าง)
#include <type_traits>
template<typename T, typename... Ts>
using sfinae_t = T;
template<typename T, bool... Bs>
using sfinae_v_t = sfinae_t<T, typename std::enable_if<Bs>::type...>;
template <typename T>
struct Test;
template <typename T>
struct Test<sfinae_v_t<T, std::is_integral_v<T>>> {};
void f() {
Test<int> t;
}
นี่คือข้อผิดพลาดที่จัดทำโดยเสียงดังกราว:
<source>:13:8: error: class template partial specialization does not specialize any template argument; to define the primary template, remove the template argument list
struct Test<sfinae_v_t<T, std::is_integral<T>::value>> {};
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
Compiler returned: 1
นี่เป็นข้อผิดพลาดในคอมไพเลอร์หรือว่าโค้ดด้านบนเรียกใช้ UB บางตัวหรือไม่
gcc
คอมไพล์ที่เห็นเป็นมันไม่ได้รวบรวมนี้ ...