On Wednesday, 14 May 2025 at 16:41:44 UTC, Sebastiaan Koppe wrote:
>Fair enough, but could the dip support it, or perhaps in the future? The fact that we both expected it was a constructor - and you could argue it actually is, on the grounds that it does in fact construct an object - suggests more users would expect it to work.
It could be added, but there's something to watch out for: as the DIP specifies, the search for constructors in a template is shallow, so just because the search didn't find one, doesn't mean there is none. I'm imagining a scenario where a constructor is hidden behind a mixin / static if or whatever, so Implicit Template Instantiation would assume a generated 'default constructor', but after the instantiation it ends up calling the written constructor instead but with template parameters resolved incorrectly. Granted, that might also happen when a 'hidden' constructor exists with a stronger match than the constructor found for IFTI, so I'm not sure. Perhaps an extra check can be added that the constructor used for deriving template parameters is the one that ends up actually being called, but it's getting rather complex.