Без where
предложение T
унаследовано от глобальной области (что довольно удивительно, но вот как это работает):
julia> T = String
String
julia> struct Point{T}
x::T
y::T
Point{T}(x,y) = new(x,y)
end
julia> Point{String}("b","a")
Point{String}("b", "a")
julia> Point{String}(SubString("b",1,1),SubString("a",1,1))
Point{String}("b", "a")
julia> Point{Int}(1, 2)
ERROR: MethodError: no method matching Point{Int64}(::Int64, ::Int64)
julia> Point{String}(1, 2)
ERROR: MethodError: Cannot `convert` an object of type Int64 to an object of type String
РЕДАКТИРОВАТЬ
Короткий ответ, учитывая комментарии к Дискурсу, заключается в том, что причина этого в том, что T
из struct
в настоящий момент неизвестен, когда вызывается внутренний конструктор.