I can't explain the rationale behind this, but I can repeat the obvious.
I found this surprising. Is it really the intention of the C++11
  standard that this code doesn't compile?
§13.3.1.7
In copy-list-initialization, if an explicit constructor is chosen, the
  initialization is ill-formed.
Removing the = fixes it: Foo foo { 42 }; but I personally find this
  harder to explain to people who have been used to the form with = for
  decades, and since the standard refers to a
  "brace-or-equal-initializer" it's not obvious why the good old way
  doesn't work in this scenario.
Foo foo { 42 } is direct initialization, whereas the equal sign (with braces) makes it copy-list-initialization. Another answer reasons that because compilation fails for copy-initialization (equal sign without braces), then it shouldn't be surprising that it also fails for copy-list-initialization, but the two fail for different reasons. 
cppreference:
Direct-initialization is more permissive than copy-initialization:
  copy-initialization only considers non-explicit constructors and
  user-defined conversion functions, while direct-initialization
  considers all constructors and implicit conversion sequences.
And their page on the explicit specifier:
Specifies constructors and (since C++11) conversion
  operators that don't allow implicit conversions or
  copy-initialization.
On the other hand, for copy-list-initialization:
T object = {arg1, arg2, ...};     (10) 
10) on the right-hand-side of the equals sign (similar to copy-initialization)
As discussed in What could go wrong if copy-list-initialization allowed explicit constructors?, the compilation fails because the explicit constructor is selected but is not allowed to be used.