[LLVMdev] C++ Casting

Reid Spencer reid at x10sys.com
Sat Nov 15 17:53:01 PST 2003


In compiling my software to use LLVM, I have noticed many occurrences of
C style casting in LLVM header files. Since I compile with the
-Wold-style-cast flag to g++, I get warnings about each of them. This
isn't a big deal but I try to keep my code compilations both error
and warning free (makes spotting true errors easier).

I'm wondering why a new C++ (LLVM) would choose to use C style casting? 
Wouldn't it be safer/clearer to use C++ style casting?

These occur pretty much only in Support/Casting.h and llvm/Use.h. They
may occur elsewhere but these are the only ones I've found so far.

A case in point:
/proj/work/llvm/include/Support/Casting.h: In static member function `static
   typename llvm::cast_retty<To, From>::ret_type llvm::cast_convert_val<To,
   FromTy, FromTy>::doit(const FromTy&)':
/proj/work/llvm/include/Support/Casting.h:181: warning: use of old-style cast

The offending code looks like:

template<class To, class FromTy> struct cast_convert_val<To,FromTy,FromTy> {
  // This _is_ a simple type, just cast it.
  static typename cast_retty<To, FromTy>::ret_type doit(const FromTy &Val) {
    return (typename cast_retty<To, FromTy>::ret_type)Val;  }
};

Shouldn't the return statement look like:

return static_cast<typename cast_retty<To, FromTy>::ret_type>(Val);

?

Just curious ...

Sorry if this is an old issue ...

Reid.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20031115/030ee9b0/attachment.sig>


More information about the llvm-dev mailing list