[Bug c++/21510] Possible bug
sven at clio dot in-berlin dot de
gcc-bugzilla@gcc.gnu.org
Mon May 16 10:22:00 GMT 2005
------- Additional Comments From sven at clio dot in-berlin dot de 2005-05-16 10:22 -------
(In reply to comment #7)
> > Is there a way to distinguish between unions (which are not usable as base
> > classes) and classes? If not, the standard is incomplete.
>
> You should know that 10 years ago people didn't even imagine the kind of
> template usages that you are assuming as obvious. Indeed, everyone wants
> to tell unions from classes now and you bet, it will be possible sometime
> in the future, likely not using SFINAE at all.
I know and accept this. SFINAE is a possible dangerous feature, anyway. It may
be better if the ISO standard declares something like the following
(incomplete, feel free to propose it to the standard comitee):
The pragma statements
_Pragme(set, "sfinae", on) // enables SFINAE
_Pragma(set, "sfinae", off) // disables SFINAE
_Pragma(reset, "sfinae") // sets SFINAE to the previous state
control the substitution-failure-is-not-an-error-feature. When setting to "on"
any substitution of a template argument of a class or function declared or
defined in the context may fail without an error, if
- the statement is syntactical correct
- there is a less specific template which could be instantiated without an
error.
When leaving the context, _Pragma(reset, "sfinae") is called automatical. The
user is complete responsible for using SFINAE, no further compiler support is
standardized.
This would localize the feature and alert the user that this is a potential
dangerous construct. And it is much more general, possible easier to
implement.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21510
More information about the Gcc-bugs
mailing list