Ovanes Markarian wrote:
> Robert, somehow I do not get your
proposal. How do you consider an
> if-branch, which is not going to
compile, i.e. compilation error. Do
> you propose, to ignore that branch
and just state: "OK, if there is a
> compilation error, that must be
eliminated without any errors to the
> end-user". I don't think this can
work. Therefore there should be a
> special language construct, which
states: "if there is a compilation
> error, than it is safe to be ignored
during the compilation"
whatever I said - what I mean is illustrated by the
following
if(0){
; // not checked by the
compiler
}
and of course the same would occur for any expression
which resulted in a 0 or false at compile time.
> Sorry it took me a bit longer, but here are my ideas....
>
Code from Slide 12 of Andrei's presentation at Going Native 2012:
>
>
> template<class T>
> struct container
>
{
> ...
> static
if(debug_mode<T>::value)
>
{
> class const_iterator { ...
};
> static
if(std::is_const<T>::value)
>
{
> typedef const_iterator
iterator;
> }
>
else
>
{
> class iterator { ...
};
> }
> }
>
else
> {
> class const_iterator
{ ... };
> clas iterator { ...
};
> }
> };
>
and my view would be that removing the "static" wouldn't change
anything in the program - so why is it necessary.
> template<class PointerWrapper>
> struct
grab_pointer_type
> {
> static
if(has_element_type<PointerWrapper>::value)
>
{
> typedef typename PointerWrapper::element_type
pointer_type;
> }
> else
>
{
> typedef typename PointerWrapper::value_type
pointer_type;
> }
> };
also in this example, removing the static wouldn't
change the
program in any way.
The only problem comes about when the dead code
won't
compile. Just skipping the dead code would
fix this problem.
btw - andrei left it as an open question whether
the compiler
should try to parse the dead code or just throw it
away.
Robert Ramey