The standard says
The closure type associated with a lambda-expression has no default constructor if the lambda-expression has a lambda-capture and a defaulted default constructor otherwise. It has a deleted copy assignment operator if the lambda-expression has a lambda-capture and defaulted copy and move assignment operators otherwise. It has a defaulted copy constructor and a defaulted move constructor (15.8). [ Note: These special member functions are implicitly defined as usual, and might therefore be defined as deleted. — end note ]
Cppreference specifically says that (emphasis mine)
If no captures are specified, the closure type has a defaulted default constructor. Otherwise, it has no default constructor (this includes the case when there is a capture-default, even if it does not actually capture anything).
If no captures are specified, the closure type has a defaulted copy assignment operator and a defaulted move assignment operator. Otherwise, it has a deleted copy assignment operator (this includes the case when there is a capture-default, even if it does not actually capture anything).
So the following must be valid.
auto lambda = [&](){};
static_assert(!std::is_default_constructible<decltype(lambda)>::value);
static_assert(!std::is_assignable<decltype(lambda), decltype(lambda)>::value);
But MSVC says they are default_constructible, etc.
https://godbolt.org/z/E6EW3rMcE
Since the paper didn't specifically mention about capture-default but not capturing in actual, I wonder if this is MSVC defect or allowed to be implementation-defined.
Update
I've reported this bug to Microsoft, and it will be fixed on the coming release link.