<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br><div><div>On 15 Sep 2014, at 3:59, Richard Smith <<a href="mailto:richard@metafoo.co.uk">richard@metafoo.co.uk</a>> wrote:</div><blockquote type="cite"><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>This gives a rather different problem. In the original question, we had</div><div><br></div><div>MyStruct -> float* -> bool -> void func(bool)</div><div>MyStruct -> T* (T = int) -> void func(int*)</div><div><br></div><div>(Note that we can't use the template for the bool overload of func, because we cannot deduce T.) In your version, we have an ambiguous conversion sequence for MyStruct and a user-defined conversion sequence for func(int*).</div></div></div></div></div></blockquote><div><br></div><div>The struct is the template, not the conversion operator. And once the struct template is instantiated, there is no difference to a non-template struct.</div></div><br><div>Sebastian</div></body></html>