
Hi, I think it would be convenient if one could treat std::pair as a boost two-tuple. Both tuples::tie and tuple assignment already work with std::pair but I've noticed that the get<> accessor doesn't. So, I propose a simple extension to tuples::get<> with the obvious semantics: boost::get<0>(p) == p.first boost::get<1>(p) == p.second The only reference I found in the archives was a post by Tomas Witt early 2002. "Tuple extension proposal": http://lists.boost.org/MailArchives/boost/msg25582.php Should I submit the code I've got or does something like this already exist somewhere? (I've tested the code using VC7.1, it doesn't rely on PTS although member-templates) Regards // Fredrik Blomqvist

"Fredrik Blomqvist" <fredrik_blomqvist@home.se> wrote in message news:c79dv8$1ch$1@sea.gmane.org... | Hi, | | I think it would be convenient if one could treat std::pair as a boost | two-tuple. And the other way around. Would it be possible to let tuple<X,Y> inherit publicly from std::pair<X,Y> ? br Thorsten

On May 4, 2004, at 7:56 PM, Fredrik Blomqvist wrote:
I think it would be convenient if one could treat std::pair as a boost two-tuple. Both tuples::tie and tuple assignment already work with std::pair but I've noticed that the get<> accessor doesn't.
So, I propose a simple extension to tuples::get<> with the obvious semantics: boost::get<0>(p) == p.first boost::get<1>(p) == p.second
The trouble with get is that pairs live in namespace std, so if pair get's are not in std, they won't get found by ADL. But if we are willing to live with not having ADL, adding gets for pairs would be fine.
The only reference I found in the archives was a post by Tomas Witt early 2002. "Tuple extension proposal": http://lists.boost.org/MailArchives/boost/msg25582.php
Should I submit the code I've got or does something like this already exist somewhere? (I've tested the code using VC7.1, it doesn't rely on PTS although member-templates)
Please send a patch or code. Jaakko

Jaakko Jarvi <jajarvi@cs.indiana.edu> writes:
On May 4, 2004, at 7:56 PM, Fredrik Blomqvist wrote:
I think it would be convenient if one could treat std::pair as a boost two-tuple. Both tuples::tie and tuple assignment already work with std::pair but I've noticed that the get<> accessor doesn't.
So, I propose a simple extension to tuples::get<> with the obvious semantics: boost::get<0>(p) == p.first boost::get<1>(p) == p.second
The trouble with get is that pairs live in namespace std, so if pair get's are not in std, they won't get found by ADL. But if we are willing to live with not having ADL, adding gets for pairs would be fine.
Isn't there another problem? Are references legal arguments for std::pair? -- Dave Abrahams Boost Consulting http://www.boost-consulting.com

On May 5, 2004, at 1:26 PM, David Abrahams wrote:
Jaakko Jarvi <jajarvi@cs.indiana.edu> writes:
On May 4, 2004, at 7:56 PM, Fredrik Blomqvist wrote:
I think it would be convenient if one could treat std::pair as a boost two-tuple. Both tuples::tie and tuple assignment already work with std::pair but I've noticed that the get<> accessor doesn't.
So, I propose a simple extension to tuples::get<> with the obvious semantics: boost::get<0>(p) == p.first boost::get<1>(p) == p.second
The trouble with get is that pairs live in namespace std, so if pair get's are not in std, they won't get found by ADL. But if we are willing to live with not having ADL, adding gets for pairs would be fine.
Isn't there another problem? Are references legal arguments for std::pair?
No, they aren't and thus we can't make pairs and 2-tuples have equivalent behavior in all cases. However, it seems that adding the get functions for pairs would not be problematic in this sense. OTOH, what Thorsten suggested, that 2-tuples would inherit from pairs, would not work. Jaakko

Jaakko Jarvi <jajarvi@cs.indiana.edu> writes:
On May 5, 2004, at 1:26 PM, David Abrahams wrote:
Jaakko Jarvi <jajarvi@cs.indiana.edu> writes:
On May 4, 2004, at 7:56 PM, Fredrik Blomqvist wrote:
I think it would be convenient if one could treat std::pair as a boost two-tuple. Both tuples::tie and tuple assignment already work with std::pair but I've noticed that the get<> accessor doesn't.
So, I propose a simple extension to tuples::get<> with the obvious semantics: boost::get<0>(p) == p.first boost::get<1>(p) == p.second
The trouble with get is that pairs live in namespace std, so if pair get's are not in std, they won't get found by ADL. But if we are willing to live with not having ADL, adding gets for pairs would be fine.
Isn't there another problem? Are references legal arguments for std::pair?
No, they aren't and thus we can't make pairs and 2-tuples have equivalent behavior in all cases. However, it seems that adding the get functions for pairs would not be problematic in this sense.
OTOH, what Thorsten suggested, that 2-tuples would inherit from pairs, would not work.
tuple<int&,char> could be derived from pair<reference_wrapper<int>,char>, no? -- Dave Abrahams Boost Consulting http://www.boost-consulting.com

Jaakko Jarvi wrote:
On May 4, 2004, at 7:56 PM, Fredrik Blomqvist wrote:
I think it would be convenient if one could treat std::pair as a boost two-tuple. Both tuples::tie and tuple assignment already work with std::pair but I've noticed that the get<> accessor doesn't.
So, I propose a simple extension to tuples::get<> with the obvious semantics: boost::get<0>(p) == p.first boost::get<1>(p) == p.second
The trouble with get is that pairs live in namespace std, so if pair get's are not in std, they won't get found by ADL. Ah, that's true..
But if we are willing to live with not having ADL, adding gets for pairs would be fine. As this was mostly a convenience addition I think it's still ok. I didn't strive for complete tuple<->pair transparency just slightly better interoperability.
Please send a patch or code.
Attached patches for: tuple/detail/tuple_basic.hpp tuple/detail/tuple_basic_no_partial_spec.hpp libs/tuple/test/tuple_test_bench.cpp The code is tested with VC7.1 both using the default tuple_basic.hpp path (that uses PTS) and forced tuple_basic_no_partial_spec.hpp. I tried to follow the existing code and thus hope that most/all previous regressions will pass... The PTS branch in tuple_basic.hpp also supports the length<> and element<> metafunctions since I found that to be the least intrusive way of adding get<>(pair) support. Is this a good thing? (I think so). Or should the changes be limited to _only_ the get<> accessor? Making the non PTS path support element<> would require more changes to the legacy code than I think is reasonable right now(?). I think it should simply be left disabled. Only a smaller additional test-suite is added. Don't really know if it's necessary to expand it and mirror/interleave it with the existing ones? I haven't made any documentation changes (yet). Hope this can be added! // Fredrik Blomqvist begin 666 tuple_basic_no_partial_spec.patch M26YD97@Z(&)O;W-T+W1U<&QE+V1E=&%I;"]T=7!L95]B87-I8U]N;U]P87)T M:6%L7W-P96,N:'!P#0H]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T] M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]#0I20U,@9FEL M93H@+V-V<W)O;W0O8F]O<W0O8F]O<W0O8F]O<W0O='5P;&4O9&5T86EL+W1U M<&QE7V)A<VEC7VYO7W!A<G1I86Q?<W!E8RYH<' L=@T*<F5T<FEE=FEN9R!R M979I<VEO;B Q+C$W#0ID:69F("UU("UR,2XQ-R!T=7!L95]B87-I8U]N;U]P M87)T:6%L7W-P96,N:'!P#0HM+2T@8F]O<W0O='5P;&4O9&5T86EL+W1U<&QE M7V)A<VEC7VYO7W!A<G1I86Q?<W!E8RYH<' ),3D@3F]V(#(P,#,@,C(Z,#$Z M-3(@+3 P,# ),2XQ-PT**RLK(&)O;W-T+W1U<&QE+V1E=&%I;"]T=7!L95]B M87-I8U]N;U]P87)T:6%L7W-P96,N:'!P"3<@36%Y(#(P,#0@,3DZ-34Z,34@ M+3 P,# -"D! ("TT-3<L-B K-#4W+#DQ($! #0H@(" @(" @?0T*(" @("!] M.PT*( T**R @(" O+R!F;W(@<W1D.CIP86ER#0HK(" @('1E;7!L871E(#QI M;G0@3CX-"BL@(" @<W1R=6-T(&=E=%]P86ER#0HK(" @(" @(" [("\O(&YO M(&1E9F%U;'0@:6UP;&5M96YT871I;VX-"BL-"BL@(" @=&5M<&QA=&4\/@T* M*R @("!S=')U8W0@9V5T7W!A:7(\,#X-"BL@(" @>PT**R @(" @(" @=&5M M<&QA=&4@/&-L87-S(%!A:7(^#0HK(" @(" @("!S=')U8W0@96QE;65N=%]R M968-"BL@(" @(" @('L-"BL@(" @(" @('!R:79A=&4Z#0HK(" @(" @(" @ M(" @='EP961E9B!T>7!E;F%M92!086ER.CIF:7)S=%]T>7!E(&5L=%]T>7!E M.PT**R @(" @(" @<'5B;&EC.@T**R @(" @(" @(" @('1Y<&5D968@='EP M96YA;64@861D7W)E9F5R96YC93QE;'1?='EP93XZ.G1Y<&4@4D54.PT**R @ M(" @(" @(" @('1Y<&5D968@4D54('1Y<&4[#0HK(" @(" @("!].PT**PT* M*R @(" @(" @=&5M<&QA=&4@/&-L87-S(%!A:7(^#0HK(" @(" @("!S=')U M8W0@96QE;65N=%]C;VYS=%]R968-"BL@(" @(" @('L-"BL@(" @(" @('!R M:79A=&4Z#0HK(" @(" @(" @(" @='EP961E9B!T>7!E;F%M92!086ER.CIF M:7)S=%]T>7!E(&5L=%]T>7!E.PT**R @(" @(" @<'5B;&EC.@T**R @(" @ M(" @(" @('1Y<&5D968@='EP96YA;64@861D7W)E9F5R96YC93QC;VYS="!E M;'1?='EP93XZ.G1Y<&4@4D54.PT**R @(" @(" @(" @('1Y<&5D968@4D54 M('1Y<&4[#0HK(" @(" @("!].PT**PT**R @(" @(" @=&5M<&QA=&4@/'1Y M<&5N86UE(%0P+"!T>7!E;F%M92!4,3X-"BL@(" @(" @('-T871I8R!I;FQI M;F4-"BL@(" @(" @('1Y<&5N86UE(&%D9%]R969E<F5N8V4\5# ^.CIT>7!E M#0HK(" @(" @("!G970H<W1D.CIP86ER/%0P+%0Q/B8@="D-"BL@(" @(" @ M('L-"BL@(" @(" @(" @("!R971U<FX@="YF:7)S=#L-"BL@(" @(" @('T- M"BL-"BL@(" @(" @('1E;7!L871E(#QT>7!E;F%M92!4,"P@='EP96YA;64@ M5#$^#0HK(" @(" @("!S=&%T:6,@:6YL:6YE#0HK(" @(" @("!T>7!E;F%M M92!A9&1?<F5F97)E;F-E/&-O;G-T(%0P/CHZ='EP90T**R @(" @(" @9V5T M*&-O;G-T('-T9#HZ<&%I<CQ4,"Q4,3XF('0I#0HK(" @(" @("![#0HK(" @ M(" @(" @(" @<F5T=7)N('0N9FER<W0[#0HK(" @(" @("!]#0HK(" @('T[ M#0HK#0HK(" @('1E;7!L871E/#X-"BL@(" @<W1R=6-T(&=E=%]P86ER/#$^ M#0HK(" @('L-"BL@(" @(" @('1E;7!L871E(#QC;&%S<R!086ER/@T**R @ M(" @(" @<W1R=6-T(&5L96UE;G1?<F5F#0HK(" @(" @("![#0HK(" @(" @ M("!P<FEV871E.@T**R @(" @(" @(" @('1Y<&5D968@='EP96YA;64@4&%I M<CHZ<V5C;VYD7W1Y<&4@96QT7W1Y<&4[#0HK(" @(" @("!P=6)L:6,Z#0HK M(" @(" @(" @(" @='EP961E9B!T>7!E;F%M92!A9&1?<F5F97)E;F-E/&5L M=%]T>7!E/CHZ='EP92!2150[#0HK(" @(" @(" @(" @='EP961E9B!2150@ M='EP93L-"BL@(" @(" @('T[#0HK#0HK(" @(" @("!T96UP;&%T92 \8VQA M<W,@4&%I<CX-"BL@(" @(" @('-T<G5C="!E;&5M96YT7V-O;G-T7W)E9@T* M*R @(" @(" @>PT**R @(" @(" @<')I=F%T93H-"BL@(" @(" @(" @("!T M>7!E9&5F('1Y<&5N86UE(%!A:7(Z.G-E8V]N9%]T>7!E(&5L=%]T>7!E.PT* M*R @(" @(" @<'5B;&EC.@T**R @(" @(" @(" @('1Y<&5D968@='EP96YA M;64@861D7W)E9F5R96YC93QC;VYS="!E;'1?='EP93XZ.G1Y<&4@4D54.PT* M*R @(" @(" @(" @('1Y<&5D968@4D54('1Y<&4[#0HK(" @(" @("!].PT* M*PT**R @(" @(" @=&5M<&QA=&4@/'1Y<&5N86UE(%0P+"!T>7!E;F%M92!4 M,3X-"BL@(" @(" @('-T871I8R!I;FQI;F4-"BL@(" @(" @('1Y<&5N86UE M(&%D9%]R969E<F5N8V4\5#$^.CIT>7!E#0HK(" @(" @("!G970H<W1D.CIP M86ER/%0P+%0Q/B8@="D-"BL@(" @(" @('L-"BL@(" @(" @(" @("!R971U M<FX@="YS96-O;F0[#0HK(" @(" @("!]#0HK#0HK(" @(" @("!T96UP;&%T M92 \='EP96YA;64@5# L('1Y<&5N86UE(%0Q/@T**R @(" @(" @<W1A=&EC M(&EN;&EN90T**R @(" @(" @='EP96YA;64@861D7W)E9F5R96YC93QC;VYS M="!4,3XZ.G1Y<&4-"BL@(" @(" @(&=E="AC;VYS="!S=&0Z.G!A:7(\5# L M5#$^)B!T*0T**R @(" @(" @>PT**R @(" @(" @(" @(')E='5R;B!T+G-E M8V]N9#L-"BL@(" @(" @('T-"BL@(" @?3L-"BL-"B @(" @?2 O+R!N86UE M<W!A8V4@9&5T86EL#0H@#0H@(" @("\O('1U<&QE(&-L87-S#0I 0" M-38X M+#8@*S8U,RPR,B! 0 T*(" @("![#0H@(" @(" @<F5T=7)N(&1E=&%I;#HZ M9V5T7V-L87-S/$X^.CIG970H="D[#0H@(" @('T-"BL-"BL@(" @+R\@;W9E M<FQO860@9F]R('-T9#HZ<&%I<@T**R @("!T96UP;&%T92 \:6YT($XL('1Y M<&5N86UE(%0P+"!T>7!E;F%M92!4,3X-"BL@(" @='EP96YA;64@9&5T86EL M.CIG971?<&%I<CQ./CHZ0D]/4U1?3D535$5$7U1%35!,051%(&5L96UE;G1? M<F5F/'-T9#HZ<&%I<CQ4,"Q4,3X@/CHZ4D54#0HK(" @(&=E="AS=&0Z.G!A M:7(\5# L5#$^)B!T+"!D971A:6PZ.G=O<FMA<F]U;F1?:&]L9&5R/$X^*B ] M(# I#0HK(" @('L-"BL@(" @(" @(')E='5R;B!D971A:6PZ.F=E=%]P86ER M/$X^.CIG970H="D[#0HK(" @('T-"BL-"BL@(" @=&5M<&QA=&4@/&EN="!. M+"!T>7!E;F%M92!4,"P@='EP96YA;64@5#$^#0HK(" @('1Y<&5N86UE(&1E M=&%I;#HZ9V5T7W!A:7(\3CXZ.D)/3U-47TY%4U1%1%]414U03$%412!E;&5M M96YT7V-O;G-T7W)E9CQS=&0Z.G!A:7(\5# L5#$^(#XZ.E)%5 T**R @("!G M970H8V]N<W0@<W1D.CIP86ER/%0P+%0Q/B8@="P@9&5T86EL.CIW;W)K87)O M=6YD7VAO;&1E<CQ./BH@/2 P*0T**R @("![#0HK(" @(" @("!R971U<FX@ M9&5T86EL.CIG971?<&%I<CQ./CHZ9V5T*'0I.PT**R @("!]#0HK#0H@#0H@ M(" @("\O($UA:V4@82!T=7!L90T*(" @("!T96UP;&%T93QT>7!E;F%M92!4 $,3X-"@`` ` end begin 666 tuple_test_bench.patch M26YD97@Z(&QI8G,O='5P;&4O=&5S="]T=7!L95]T97-T7V)E;F-H+F-P< T* M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T] M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/0T*4D-3(&9I;&4Z("]C=G-R;V]T+V)O M;W-T+V)O;W-T+VQI8G,O='5P;&4O=&5S="]T=7!L95]T97-T7V)E;F-H+F-P M<"QV#0IR971R:65V:6YG(')E=FES:6]N(#$N,C -"F1I9F8@+74@+7(Q+C(P M('1U<&QE7W1E<W1?8F5N8V@N8W!P#0HM+2T@;&EB<R]T=7!L92]T97-T+W1U M<&QE7W1E<W1?8F5N8V@N8W!P"34@4V5P(#(P,#,@,38Z-3(Z-34@+3 P,# ) M,2XR, T**RLK(&QI8G,O='5P;&4O=&5S="]T=7!L95]T97-T7V)E;F-H+F-P M< DW($UA>2 R,# T(#(Q.C$R.C Q("TP,# P#0I 0" M-#4R+#8@*S0U,BPT M,"! 0 T*('T-"B -"B -"BMV;VED('1U<&QE7W!A:7)?:6YT97)O<&5R86)I M;&ET>5]T97-T*"D-"BM[#0HK(" @('1Y<&5D968@<W1D.CIP86ER/&EN="P@ M9FQO870^(% Q.PT**PT**R-I9FYD968@0D]/4U1?3D]?5$5-4$Q!5$5?4$%2 M5$E!3%]34$5#24%,25I!5$E/3@T**R @("!"3T]35%]35$%424-?05-315)4 M*'1U<&QE<SHZ;&5N9W1H/% Q/CHZ=F%L=64@/3T@,BD[#0HK(V5N9&EF#0HK M#0HK(" @(% Q(' Q.PT**R @("!G970\,#XH<#$I(#T@,3(S.PT**PT**R @ M("!"3T]35%]415-4*&=E=#PP/BAP,2D@/3T@,3(S*3L-"BL@(" @0D]/4U1? M5$535"AP,2YF:7)S=" ]/2 Q,C,I.PT**PT**R @("!G970\,3XH<#$I(#T@ M,RXQ-&8[#0HK(" @($)/3U-47U1%4U0H9V5T/#$^*' Q*2 \(#,N,35F("8F M(&=E=#PQ/BAP,2D@/B S+C$S9BD[#0HK(" @($)/3U-47U1%4U0H<#$N<V5C M;VYD(#P@,RXQ-68@)B8@<#$N<V5C;VYD(#X@,RXQ,V8I.PT**PT**R @(" K M*V=E=#PP/BAP,2D[#0HK(" @($)/3U-47U1%4U0H<#$N9FER<W0@/3T@,3(T M*3L-"BL-"BL@(" @<W1D.CIP86ER/&1O=6)L92P@8V]N<W0@8VAA<CX@<#(H M,2XU+" G>"<I.PT**R @("!"3T]35%]415-4*&=E=#PP/BAP,BD@/" Q+C4Q M*3L-"BLO+R @9V5T/# ^*' R*2 ]("=Y)SLO+R!S:&]U;&1N)W0@8V]M<&EL M90T**R\O("!P,BYS96-O;F0@/2 G>2<[("\O('-H;W5L9&XG="!C;VUP:6QE M#0HK(" @($)/3U-47U1%4U0H9V5T/#$^*' R*2 ]/2 G>"<I.PT**R\O(" K M*V=E=#PQ/BAP,BD[(" @("\O('-H;W5L9&XG="!C;VUP:6QE#0HK#0HK(" @ M(&-O;G-T('-T9#HZ<&%I<CQI;G0L(&)O;VP^(' S*#0R+"!T<G5E*3L-"BL@ M(" @0D]/4U1?5$535"AG970\,#XH<#,I(#T](#0R*3L-"BL@(" @0D]/4U1? M5$535"AG970\,3XH<#,I(#T]('1R=64I.PT**WT-"BL-"BL-"B -"B -"B O M+R M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM#0I 0" M-#<Q+#$R M("LU,#4L-B! 0 T*(" @8V]N<U]T97-T*"D[#0H@("!C;VYS=%]T=7!L95]T M97-T*"D[#0H@("!T=7!L95]L96YG=&A?=&5S="@I.PT**R @='5P;&5?<&%I M<E]I;G1E<F]P97)A8FEL:71Y7W1E<W0H*3L-"B @(')E='5R;B P.PT*('T- 6"BT-"BT-"BT-"BT-"BT-"BT-"BT-"@`` ` end begin 666 tuple_basic.patch M26YD97@Z(&)O;W-T+W1U<&QE+V1E=&%I;"]T=7!L95]B87-I8RYH<' -"CT] M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T] M/3T]/3T]/3T]/3T]/3T]/3T]/3T-"E)#4R!F:6QE.B O8W9S<F]O="]B;V]S M="]B;V]S="]B;V]S="]T=7!L92]D971A:6PO='5P;&5?8F%S:6,N:'!P+'8- M"G)E=')I979I;F<@<F5V:7-I;VX@,2XR,PT*9&EF9B M=2 M<C$N,C,@='5P M;&5?8F%S:6,N:'!P#0HM+2T@8F]O<W0O='5P;&4O9&5T86EL+W1U<&QE7V)A M<VEC+FAP< DR."!/8W0@,C P,R P.3HT,CHT,R M,# P, DQ+C(S#0HK*RL@ M8F]O<W0O='5P;&4O9&5T86EL+W1U<&QE7V)A<VEC+FAP< DW($UA>2 R,# T M(#(P.C P.C,W("TP,# P#0I 0" M,3(P+#8@*S$R,"PT,B! 0 T*(" @?0T* M('T[#0H@#0HK+R\@9F]R('-T9#HZ<&%I<@T**W1E;7!L871E(#QI;G0@3CX- M"BMS=')U8W0@9V5T7W!A:7(-"BL@(" @.R O+R!N;R!D969A=6QT(&EM<&QE M;65N=&%T:6]N#0HK#0HK=&5M<&QA=&4\/@T**W-T<G5C="!G971?<&%I<CPP M/@T**WL-"BL@(" @=&5M<&QA=&4@/&-L87-S(%)%5"P@8VQA<W,@5# L(&-L M87-S(%0Q/@T**R @("!I;FQI;F4@<W1A=&EC(%)%5"!G970H8V]N<W0@<W1D M.CIP86ER/%0P+%0Q/B8@="D-"BL@(" @>PT**R @(" @(" @<F5T=7)N('0N M9FER<W0[#0HK(" @('T-"BL@(" @=&5M<&QA=&4@/&-L87-S(%)%5"P@8VQA M<W,@5# L(&-L87-S(%0Q/@T**R @("!I;FQI;F4@<W1A=&EC(%)%5"!G970H M<W1D.CIP86ER/%0P+%0Q/B8@="D-"BL@(" @>PT**R @(" @(" @<F5T=7)N M('0N9FER<W0[#0HK(" @('T-"BM].PT**PT**W1E;7!L871E/#X-"BMS=')U M8W0@9V5T7W!A:7(\,3X-"BM[#0HK(" @('1E;7!L871E(#QC;&%S<R!2150L M(&-L87-S(%0P+"!C;&%S<R!4,3X-"BL@(" @:6YL:6YE('-T871I8R!2150@ M9V5T*&-O;G-T('-T9#HZ<&%I<CQ4,"Q4,3XF('0I#0HK(" @('L-"BL@(" @ M(" @(')E='5R;B!T+G-E8V]N9#L-"BL@(" @?0T**R @("!T96UP;&%T92 \ M8VQA<W,@4D54+"!C;&%S<R!4,"P@8VQA<W,@5#$^#0HK(" @(&EN;&EN92!S M=&%T:6,@4D54(&=E="AS=&0Z.G!A:7(\5# L5#$^)B!T*0T**R @("![#0HK M(" @(" @("!R971U<FX@="YS96-O;F0[#0HK(" @('T-"BM].PT**PT**PT* M('T@+R\@96YD(&]F(&YA;65S<&%C92!D971A:6P-"B -"B -"D! ("TQ-3<L M-B K,3DS+#,R($! #0H@("!T>7!E9&5F('1Y<&5N86UE(&)O;W-T.CIA9&1? M8V]N<W0\='EP96YA;64@5#HZ:&5A9%]T>7!E/CHZ='EP92!T>7!E.PT*('T[ M#0H@#0HK+R\@<W!E8VEA;&EZ871I;VYS(&9O<B!S=&0Z.G!A:7(-"BMT96UP M;&%T92 \8VQA<W,@5# L(&-L87-S(%0Q/@T**W-T<G5C="!E;&5M96YT/# L M('-T9#HZ<&%I<CQ4,"Q4,3X@/@T**WL-"BL@(" @='EP961E9B!4,"!T>7!E M.PT**WT[#0HK#0HK=&5M<&QA=&4@/&-L87-S(%0P+"!C;&%S<R!4,3X-"BMS M=')U8W0@96QE;65N=#PQ+"!S=&0Z.G!A:7(\5# L5#$^(#X-"BM[#0HK(" @ M('1Y<&5D968@5#$@='EP93L-"BM].PT**PT**W1E;7!L871E(#QC;&%S<R!4 M,"P@8VQA<W,@5#$^#0HK<W1R=6-T(&5L96UE;G0\,"P@8V]N<W0@<W1D.CIP M86ER/%0P+%0Q/B ^#0HK>PT**R @("!T>7!E9&5F('1Y<&5N86UE(&)O;W-T M.CIA9&1?8V]N<W0\5# ^.CIT>7!E('1Y<&4[#0HK?3L-"BL-"BMT96UP;&%T M92 \8VQA<W,@5# L(&-L87-S(%0Q/@T**W-T<G5C="!E;&5M96YT/#$L(&-O M;G-T('-T9#HZ<&%I<CQ4,"Q4,3X@/@T**WL-"BL@(" @='EP961E9B!T>7!E M;F%M92!B;V]S=#HZ861D7V-O;G-T/%0Q/CHZ='EP92!T>7!E.PT**WT[#0HK M#0HK#0H@+R\@+6=E="!F=6YC=&EO;B!T96UP;&%T97,@+2TM+2TM+2TM+2TM M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2T-"B O+R!5<V%G M93H@9V5T/$X^*&%4=7!L92D-"B -"D! ("TR,38L-B K,C<X+#,T($! #0H@ M(" @(" @(" @/CHZ8V]N<W1?='EP93XH8RD[#0H@?0T*( T**R\O(&]V97)L M;V%D<R!F;W(@<W1D.CIP86ER#0HK=&5M<&QA=&4@/&EN="!.+"!C;&%S<R!4 M,"P@8VQA<W,@5#$^#0HK:6YL:6YE('1Y<&5N86UE(&%C8V5S<U]T<F%I=',\ M#0HK(" @(" @(" @(" @(" @(" @("!T>7!E;F%M92!E;&5M96YT/$XL('-T M9#HZ<&%I<CQ4,"Q4,3X@/CHZ='EP90T**R @(" @(" @(" @(" @(" ^.CIN M;VY?8V]N<W1?='EP90T**V=E="AS=&0Z.G!A:7(\5# L5#$^)B!C($)/3U-4 M7T%04$5.1%]%6%!,24-)5%]414U03$%415].3TY?5%E012AI;G0L($XI*0T* M*WL-"BL@(" @<F5T=7)N(&1E=&%I;#HZ9V5T7W!A:7(\3CXZ.D)/3U-47TY% M4U1%1%]414U03$%410T**R @(" @(" @9V5T/ T**R @(" @(" @(" @('1Y M<&5N86UE(&%C8V5S<U]T<F%I=',\#0HK(" @(" @(" @(" @(" @('1Y<&5N M86UE(&5L96UE;G0\3BP@<W1D.CIP86ER/%0P+%0Q/B ^.CIT>7!E#0HK(" @ M(" @(" ^.CIN;VY?8V]N<W1?='EP93XH8RD[#0HK?0T**PT**W1E;7!L871E M(#QI;G0@3BP@8VQA<W,@5# L(&-L87-S(%0Q/@T**VEN;&EN92!T>7!E;F%M M92!A8V-E<W-?=')A:71S/ T**R @(" @(" @(" @(" @(" @(" @='EP96YA M;64@96QE;65N=#Q.+"!S=&0Z.G!A:7(\5# L5#$^(#XZ.G1Y<&4-"BL@(" @ M(" @(" @(" @(" @/CHZ8V]N<W1?='EP90T**V=E="AC;VYS="!S=&0Z.G!A M:7(\5# L5#$^)B!C($)/3U-47T%04$5.1%]%6%!,24-)5%]414U03$%415]. M3TY?5%E012AI;G0L($XI*0T**WL-"BL@(" @<F5T=7)N(&1E=&%I;#HZ9V5T M7W!A:7(\3CXZ.D)/3U-47TY%4U1%1%]414U03$%410T**R @(" @(" @9V5T M/ T**R @(" @(" @(" @('1Y<&5N86UE(&%C8V5S<U]T<F%I=',\#0HK(" @ M(" @(" @(" @(" @('1Y<&5N86UE(&5L96UE;G0\3BP@<W1D.CIP86ER/%0P M+%0Q/B ^.CIT>7!E#0HK(" @(" @(" ^.CIC;VYS=%]T>7!E/BAC*3L-"BM] M#0HK#0HK#0H@+R\@+2T@=&AE(&-O;G,@=&5M<&QA=&4@("TM+2TM+2TM+2TM M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM#0H@;F%M M97-P86-E(&1E=&%I;"![#0H@#0I 0" M-#$U+#8@*S4P-2PQ,B! 0 T*('1E M;7!L871E/#X-"B!S=')U8W0@;&5N9W1H/&YU;&Q?='EP93X@>PT*(" @0D]/ M4U1?4U1!5$E#7T-/3E-404Y4*&EN="P@=F%L=64@/2 P*3L-"BM].PT**PT* M*W1E;7!L871E/&-L87-S(%0P+"!C;&%S<R!4,3X-"BMS=')U8W0@;&5N9W1H M/'-T9#HZ<&%I<CQ4,"Q4,3X@/@T**WL-"BL@(" @0D]/4U1?4U1!5$E#7T-/ D3E-404Y4*&EN="P@=F%L=64@/2 R*3L-"B!].PT*( T*( T* ` end
participants (4)
-
David Abrahams
-
Fredrik Blomqvist
-
Jaakko Jarvi
-
Thorsten Ottosen