Libc++ appears to have a problem with dynamic_casting between types where one of them is a template that has been forward declared. This is the only case that I see this problem coming up. Due to the existing interdependencies between header files, I *must* forward declare the Assignable_Proxy_Function_Impl. I don't see any other way around this than to work around the standard library bug.