Update on C++11 user-defined literal status
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2009-matevz@13850 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
e25da884cb
commit
dd18423e76
2 changed files with 45 additions and 12 deletions
|
|
@ -516,18 +516,49 @@ inside the string due to SWIG's C++ preprocessor.</p>
|
||||||
<H3><a name="Cpp0x_User_defined_literals"></a>7.2.19 User-defined literals</H3>
|
<H3><a name="Cpp0x_User_defined_literals"></a>7.2.19 User-defined literals</H3>
|
||||||
|
|
||||||
|
|
||||||
<p>SWIG correctly parses the new <tt>operator""_mysuffix()</tt> functions.</p>
|
<p>
|
||||||
|
SWIG parses the declaration of user-defined literals, that is, the <tt>operator "" _mysuffix()</tt> function syntax.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Some examples are the raw literal:
|
||||||
|
</p>
|
||||||
|
<div class="code"><pre>
|
||||||
|
OutputType operator "" _myRawLiteral(const char * value);
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
numeric cooked literals:
|
||||||
|
</p>
|
||||||
|
<div class="code"><pre>
|
||||||
|
OutputType operator "" _mySuffixIntegral(unsigned long long);
|
||||||
|
OutputType operator "" _mySuffixFloat(long double);
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
and cooked string literals:
|
||||||
|
</p>
|
||||||
<div class="code"><pre>
|
<div class="code"><pre>
|
||||||
OutputType operator "" _mySuffix(const char * string_values, size_t num_chars);
|
OutputType operator "" _mySuffix(const char * string_values, size_t num_chars);
|
||||||
OutputType operator "" _mySuffix(const wchar_t * string_values, size_t num_chars);
|
OutputType operator "" _mySuffix(const wchar_t * string_values, size_t num_chars);
|
||||||
OutputType operator "" _mySuffix(const char16_t * string_values, size_t num_chars);
|
OutputType operator "" _mySuffix(const char16_t * string_values, size_t num_chars);
|
||||||
OutputType operator "" _mySuffix(const char32_t * string_values, size_t num_chars);
|
OutputType operator "" _mySuffix(const char32_t * string_values, size_t num_chars);
|
||||||
OutputType operator "" _mySuffix(int value);
|
|
||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
<p>The %rename currently doesn't parse the double quotes. Please
|
<p>
|
||||||
rename the functions in the code using the #define preprocessor directive.</p>
|
Note that the %rename directive currently does not parse the double quotes, so these can't be easily accessed from
|
||||||
|
target languages.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Use of user-defined literals such as the following still give a syntax error:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="code"><pre>
|
||||||
|
OutputType var1 = "1234"_suffix;
|
||||||
|
OutputType var2 = 1234_suffix;
|
||||||
|
OutputType var3 = 3.1416_suffix;
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
<H3><a name="Cpp0x_Thread_local_storage"></a>7.2.20 Thread-local storage</H3>
|
<H3><a name="Cpp0x_Thread_local_storage"></a>7.2.20 Thread-local storage</H3>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/* This testcase checks whether SWIG correctly parses the user-defined literals
|
/* This testcase checks whether SWIG correctly parses the user-defined literals
|
||||||
for the string introduced in C++0x. */
|
introduced in C++0x. */
|
||||||
%module cpp0x_userdefined_literals
|
%module cpp0x_userdefined_literals
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
|
|
@ -7,18 +7,20 @@
|
||||||
|
|
||||||
struct OutputType {
|
struct OutputType {
|
||||||
int val;
|
int val;
|
||||||
|
OutputType(int v) : val(v) {}
|
||||||
OutputType(int v) { v=val; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Note: GCC doesn't support user-defined literals yet! */
|
// Raw literal
|
||||||
struct TT {
|
OutputType operator "" _myRawLiteral(const char * value) { return OutputType(10); }
|
||||||
OutputType operator "" (const char * string_values, size_t num_chars) { return OutputType(100); }
|
|
||||||
|
// Cooked numeric literals
|
||||||
|
OutputType operator "" _mySuffixIntegral(unsigned long long) { return OutputType(20); }
|
||||||
|
OutputType operator "" _mySuffixFloat(long double) { return OutputType(30); }
|
||||||
|
|
||||||
|
// Cooked string literals
|
||||||
OutputType operator "" _mySuffix1(const char * string_values, size_t num_chars) { return OutputType(100); }
|
OutputType operator "" _mySuffix1(const char * string_values, size_t num_chars) { return OutputType(100); }
|
||||||
OutputType operator "" _mySuffix2(const wchar_t * string_values, size_t num_chars) { return OutputType(200); }
|
OutputType operator "" _mySuffix2(const wchar_t * string_values, size_t num_chars) { return OutputType(200); }
|
||||||
OutputType operator "" _mySuffix3(const char16_t * string_values, size_t num_chars) { return OutputType(300); }
|
OutputType operator "" _mySuffix3(const char16_t * string_values, size_t num_chars) { return OutputType(300); }
|
||||||
OutputType operator "" _mySuffix4(const char32_t * string_values, size_t num_chars) { return OutputType(400); }
|
OutputType operator "" _mySuffix4(const char32_t * string_values, size_t num_chars) { return OutputType(400); }
|
||||||
OutputType operator "" _mySuffix5(int value) /* cooked version - ie. atoi() of string */ { return OutputType(500); }
|
|
||||||
};
|
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue