After extensive reading of ISO/IEC 14882, Programming language – C++ I\'m still unsure why const is needed for implicit conversion to a user-defined type with a
Per section 5.2.2 paragraph 5, when an argument to a function is of const reference type, a temporary variable is automatically introduced if needed. In your example, the rvalue result of X(99) has to be put into a temporary variable so that that variable can be passed by const reference to implicit_conversion_func.