I think I more or less got a working patch for constructors and global rvalue init. The remaining concern is that type matching on the other entry points only remove one qualifier (not recursive), and does not match on eg. "pointer to const x" made from different function calls. Which makes cast pretty much mandatory for any nested type. I made a "strip all and compare types" for the new entrypoints, but I wonder if that just makes it more confusing for the user? I attached a WIP patch.