We can force it though with something like this:
template arrlit(T...) { static __gshared immutable int[] literal = [T]; alias arrlit = literal; } arr2 ~= arrlit!(1,2,3);then it doesn't allocate (arr2 is a StackArray btw). The arrlit.ptr is the initialized data segment, which is a much more reasonable place for it than doing a runtime allocation.