Múltiples especializaciones de plantilla de clase SFINAE usando void_t

¿Son válidas las especializaciones de plantillas de clase múltiple, cuando cada una es distinta solo entre patrones que involucran parámetros de plantilla en contextos no deducidos?

Un ejemplo común destd::void_t lo usa para definir un rasgo que revela si un tipo tiene un miembrotypedef llamado "tipo". Aquí, se emplea una única especialización. Esto podría extenderse para identificar si un tipo tieneya sea un miembrotypedef llamado "tipo1" o uno llamado "tipo2". El siguiente código de C ++ 1z se compila con GCC, pero no con Clang. Es legal?

template <class, class = std::void_t<>>
struct has_members : std::false_type {};

template <class T>                      
struct has_members<T, std::void_t<typename T::type1>> : std::true_type {};

template <class T>                                                        
struct has_members<T, std::void_t<typename T::type2>> : std::true_type {};