সমস্যাটি কী তা আমি বুঝতে পারি না: হয় আমার কোডে বা সংকলকটিতে (কম সম্ভব)। এখানে কোডের একটি অংশ রয়েছে:
#include <iostream>
#include <type_traits>
#include <set>
template<typename T, typename = void>
struct TestA: std::false_type {};
template<typename T>
struct TestA<T, std::void_t<typename T::reverse_iterator>> : std::true_type {};
template<typename T>
struct TestA<T, std::void_t<typename T::dummy_iterator>> : std::true_type {};
int main()
{
std::cout << TestA<std::set<int>>::value;
}
জিসিসি এবং এমএসভিসি উভয়ই এটি সংকলন করে। আমি এটি জিডিসি এবং এমএসভিসি 17 (স্থানীয়) এবং 19 এর বিভিন্ন সংস্করণ দিয়ে গডবোল্টে পরীক্ষা করেছি Here এখানে একটি লিঙ্ক দেওয়া হয়েছে: https://godbolt.org/z/Enfm6L ।
তবে কলং এটি সংকলন করে না এবং একটি ত্রুটিটি প্রকাশ করে:
redefinition of `'TestA<T, std::void_t<typename T::dummy_iterator> >'`
এবং আমি আগ্রহী - সম্ভবত স্ট্যান্ডার্ডের কিছু অংশ রয়েছে যেখানে এই কোডের অংশটি ভুল বা অন্য কিছু হতে পারে।