From: Brad K. <bra...@ki...> - 2003-12-15 21:20:05
|
On Mon, 15 Dec 2003, Ian Scott wrote: > Is <ciso646> actually in the standard? > It isn't listed in Stroustrup Ed3's index. > > The current rule is > "If it isn't in the standard it shouldn't be in vcl." [VXL book] > > We have occasionally broken that rule, but never for files used directly by > users. > > One possible reason for breaking it now, might be if it has been accepted by > the C++ committee for inclusion into C++0x. This is an interesting issue. I did not add vcl_ciso646.h, but I found it there and it caused problems so I tried to fix it. Since I just upgraded ITK's VXL I've been busy today, but I've been meaning to bring this issue up here. The <ciso646> header is listed as a C++98 header, but it specifically says that the and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, and xor_eq symbols are defined as C++ keywords and are NOT defined by ciso646 as macros. Section C.2.2.2 defines this as a difference between the C standard's iso646.h and the C++ standard's ciso646. Since not all compilers define these symbols as keywords or even provide the header, but the symbols are defined by C++, I think it belongs in vcl. Perhaps the solution is to define vcl_and, vcl_and_eq, vcl_bitand, vcl_bitor, etc. as macros in the vcl_ciso646.h header. This will avoid namespace pollution and violating the C++ standard but will make the symbols available on all platforms. The drawback to this approach is that it violates the vcl_ -> std:: mapping. The alternative is to just remove the vcl version of the header altogether and tell people not to use those keywords. -Brad |