I just ran into a very serious problem.
Consider this:
fun .. = "X<?1>(.. )"
This looks innocent. But consider:
X<::std::size_t>
Looks ok? It isn't:
error: expected ‘<’ before ‘<:’ token
http://en.wikipedia.org/wiki/Digraph_%28computing%29
In 1994 a normative amendment to the C standard, included in C99, supplied
digraphs as more readable alternatives to five of the trigraphs. They are:
Digraph Equivalent
<: [
:> ]
<% {
%> }
%: #
Unlike trigraphs, digraphs are handled during tokenization, and any digraph
must always represent a full token by itself, or compose the token %:%:
replacing the preprocessor concatenation token ##. If a digraph sequence occurs
inside another token, for example a quoted string, or a character constant, it
will not be replaced.
So what to do? Put parens everywhere like this?
<( ... )>
Well no, C/C++ is such a completely stupid language, this doesn't work:
template<class T> class X {};
int main() {
X<(int)> x;
}
~/felix>clang++ -c x.cpp
x.cpp:5:10: error: expected expression
X<(int)> x;
So the only alternative is to FORCE extra spaces *everywhere*.
X< ?1 >
--
john skaller
[email protected]
http://felix-lang.org
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar
_______________________________________________
Felix-language mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/felix-language