[cfe-users] dynmaic_cast in uninstantiated function templates

Mat Sutcliffe via cfe-users cfe-users at lists.llvm.org
Wed Oct 24 09:42:03 PDT 2018

On Wed, 24 Oct 2018 at 02:06, Olaf wrote:
> the code below compiles on gcc and icc, but not on clang with the error:
> source_file.cpp:14:16: error: 'B' is an incomplete type
>   if (auto b = dynamic_cast<B*>(a))
> However fn is an uninstantiated function template.
> Is this a glitch in clang or is clang the only one right here?
> class B;
> template<class T>
> void fn(A* a, T& x)
> {
>   dynamic_cast<B*>(a);
> }

All three compilers are correct here, as far as the standard is
concerned. The code is ill-formed, but implementations are not
required to diagnose this kind of error. There is no type T that could
produce a well-formed instantiation of fn.

More information about the cfe-users mailing list