Puneetha K via llvm-dev
2017-Jun-06 12:18 UTC
[llvm-dev] __is_empty type-trait implementation in llvm
Hi all, In c++11 and above, llvm supports many type traits like __is_empty, __is_abstract etc. GCC throws an error if we pass an array of incomplete type with unknown bounds, saying incomplete type. LLVM also throws an error for some particular type traits and not for others. Of what I have read, the standard specifies to accept only complete type or void for is_empty. But in the code, if we pass an array of unknown bounds, it still compiles. Example code: struct I; int a = __is_empty(I[]) This compiles in the current svn. Whereas isn't it supposed to give incomplete type error, like GCC? Thanks & Regards, Puneetha -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170606/27e5ee09/attachment.html>
Erik Pilkington via llvm-dev
2017-Jun-07 03:50 UTC
[llvm-dev] __is_empty type-trait implementation in llvm
+cfe-dev From [meta.unary.prop], for std::is_empty: "If T is a non-union class type, T shall be a complete type.". Since an incomplete array type isn't a class type, we don't need to require the complete type here, AFAIK. Thanks, Erik On 6/6/17 5:18 AM, Puneetha K via llvm-dev wrote:> Hi all, > > In c++11 and above, llvm supports many type traits like __is_empty, > __is_abstract etc. > GCC throws an error if we pass an array of incomplete type with > unknown bounds, saying incomplete type. > LLVM also throws an error for some particular type traits and not for > others. > > Of what I have read, the standard specifies to accept only complete > type or void for is_empty. > But in the code, if we pass an array of unknown bounds, it still compiles. > > Example code: > > struct I; > int a = __is_empty(I[]) > > This compiles in the current svn. Whereas isn't it supposed to give > incomplete type error, like GCC? > > Thanks & Regards, > Puneetha > > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170606/be0235b6/attachment.html>