Sorunun ne olduğunu anlamıyorum: kodumda veya derleyicide (daha az mümkün). Bunun gibi bir kod parçası var:
#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;
}
Hem GCC hem de MSVC derler. GCC ve MSVC 17 (yerel) ve 19'un farklı versiyonu ile godbolt üzerinde test ettim. İşte bir bağlantı: https://godbolt.org/z/Enfm6L .
Ancak Clang derlemiyor ve bir hata veriyor:
redefinition of `'TestA<T, std::void_t<typename T::dummy_iterator> >'`
Ve ilgileniyorum - belki de bu kod parçasının yanlış olduğu ya da başka bir şeyin olduğu standartların bir kısmı vardır.