පහත දැක්වෙන සියලුම සම්මත යොමු කිරීම් N4659: මාර්තු 2017 පශ්චාත්-කෝනා වැඩ කෙටුම්පත / සී ++ 17 ඩීඅයිඑස් .
යතුරු ලියන ප්රකාශයන් අන්වර්ථ ප්රකාශයන් ආරම්භක ප්රකාශ ලෙස භාවිතා කළ නොහැක
එහෙත්, පළමු අච්චු නොවන උදාහරණ දෙක සමඟ, ප්රමිතියේ වෙනත් සියුම් වෙනස්කම් තිබේද?
- අර්ථකථනයේ වෙනස්කම් : කිසිවක් නැත.
- අවසර ලත් සන්දර්භවල වෙනස්කම් : සමහර (1) .
(1) මුල් පෝස්ට් එකේ දැනටමත් සඳහන් කර ඇති අන්වර්ථ සැකිලි වල උදාහරණ වලට අමතරව .
එකම අර්ථ නිරූපණය
[Dcl.typedef] / 2 මගින් පාලනය වන පරිදි [උපුටා ගැනීම, අවධාරණය මගේ]
[dcl.typedef] / 2 ඒ
typedef-නම
ද විසින් හඳුන්වා දිය හැක
හෙවත්-ප්රකාශය . මෙම හඳුනාගැනීමේ පහත සඳහන් using
මූල පදය බවට පත් වන
typedef-නම සහ විකල්ප විශේෂණය-විශේෂණයක්-මහලේකම් පා පහත සඳහන් හඳුනාගැනීමේ බව appertains typedef-නම . එවැනි
යතුරු ලියනයක නමටtypedef
පිරිවිතර විසින් හඳුන්වා දුන් ආකාරයටම අර්ථකථන ඇත . [...]
එය typedef-නම මගින් හඳුන්වා හෙවත්-ප්රකාශය කර එම semantics එය විසින් හඳුන්වා දෙන ලදී නම් වේ typedef
ප්රකාශ.
අවසර ලත් සන්දර්භයන්හි සියුම් වෙනස
කෙසේ වෙතත්, මෙම විචල්යයන් දෙක භාවිතා කළ හැකි සන්දර්භයන් තුළ එකම සීමාවන් ඇති බව මින් ඇඟවෙන්නේ නැත . නියත වශයෙන්ම කෙළවරේ නඩුව වුවත්, එය typedef ප්රකාශ යනු init-ප්රකාශය හා ඒ නිසා ආරම්භය ප්රකාශ ඉඩ සලසා දෙයි සන්දර්භයන් තුළ භාවිතා කළ හැකි
// C++11 (C++03) (init. statement in for loop iteration statements).
for(typedef int Foo; Foo{} != 0;) {}
// C++17 (if and switch initialization statements).
if (typedef int Foo; true) { (void)Foo{}; }
// ^^^^^^^^^^^^^^^ init-statement
switch(typedef int Foo; 0) { case 0: (void)Foo{}; }
// ^^^^^^^^^^^^^^^ init-statement
// C++20 (range-based for loop initialization statements).
std::vector<int> v{1, 2, 3};
for(typedef int Foo; Foo f : v) { (void)f; }
// ^^^^^^^^^^^^^^^ init-statement
ක ෙහයින්ද, නොහොත්-ප්රකාශය වන්නේ නැත යනු init-ප්රකාශය , සහ ඒ අනුව නොවේ ආරම්භය ප්රකාශ ඉඩ සලසා දෙයි සන්දර්භයන් තුළ භාවිතා කළ
// C++ 11.
for(using Foo = int; Foo{} != 0;) {}
// ^^^^^^^^^^^^^^^ error: expected expression
// C++17 (initialization expressions in switch and if statements).
if (using Foo = int; true) { (void)Foo{}; }
// ^^^^^^^^^^^^^^^ error: expected expression
switch(using Foo = int; 0) { case 0: (void)Foo{}; }
// ^^^^^^^^^^^^^^^ error: expected expression
// C++20 (range-based for loop initialization statements).
std::vector<int> v{1, 2, 3};
for(using Foo = int; Foo f : v) { (void)f; }
// ^^^^^^^^^^^^^^^ error: expected expression
typedef void (&MyFunc)(int,int);
හෝusing MyFunc = void(int,int);
?