No, all three forms are different and can be well formed or poorly formed independently in different circumstances.
Here is an example where the first form compiles and the second and third do not:
class Type {
public:
explicit Type(int, int) {}
};
int main()
{
Type t1{1, 2};
Type t2({1, 2});
Type t3 = {1, 2};
}
Here is an example where the compilation of the second form, but the first and third do not:
class Pair {
public:
Pair(int, int) {}
};
class Type {
public:
Type(const Pair&) {}
};
int main()
{
Type t1{1, 2};
Type t2({1, 2});
Type t3 = {1, 2};
}
, @TC, , :
struct StrangeConverter {
explicit operator double() = delete;
operator float() { return 0.0f; }
};
int main() {
StrangeConverter sc;
using Type = double;
Type t1{sc};
Type t2({sc});
Type t3 = {sc};
}