void_t falla en Visual Studio 2015

No entiendo por qué la siguiente prueba siempre falla con Visual Studio 2015 (los activadores static_assert):

#include <type_traits>
using namespace std;

template<class T> using try_assign = decltype(declval<T&>() = declval<T const&>());
template<class, class = void> struct my_is_copy_assignable : false_type {};
template<class T> struct my_is_copy_assignable<T, void_t<try_assign<T>>> : true_type {};

int main()
{
    static_assert(my_is_copy_assignable<int>::value, "fail");
    return 0;
}

Básicamente es la transcripción del ejemplo de uso de Walter E Brown de void_t de su presentación de cppcon 2014 "Modern Template Metaprogramming - A compendium".

Es importante tener en cuenta que esta versión alternativa funciona, así que no creo que el problema radique en el soporte incompleto de MSVC para la expresión SFINAE.

template<class T>
using try_assign = decltype(declval<T&>() = declval<T const&>());

template<class T>
struct my_is_copy_assignable
{
  template<class Q, class = try_assign<Q>>
  static true_type tester(Q&&);
  static false_type tester(...);
  using type = decltype(tester(declval<T>()));
};

Se acerca destd::is_copy_assignable pero solo estoy interesado en comprender mejor las diversas técnicas de metaprogramación disponibles en las diferentes revisiones de C ++. Leí varios hilos sobre void_t en la web pero todavía no entiendo por qué falla este ejemplo.

Lo interesante es que con GCC 4.8.2 funciona bien (usando la solución alternativa CWG 1558, que es lo mismo que la versión de Microsoft).

¿Es un error conocido de Visual Studio, o estoy haciendo algo mal?

Respuestas a la pregunta(2)

Su respuesta a la pregunta