clang++のboost対応状況 part.4
そろそろコードフリーズらしいから,clang++でBoost本のサンプルがどれだけコンパイルか出来るかのテストを約3週間ぶりにやってみた.
例によって,g++ 4.4.3との比較(行頭に-がclang++でコンパイル失敗)
BoostBook2nd/1-String/format1 BoostBook2nd/1-String/format2 BoostBook2nd/1-String/format3 BoostBook2nd/1-String/format4 BoostBook2nd/1-String/lexcast1 BoostBook2nd/1-String/lexcast2 BoostBook2nd/1-String/regex1 BoostBook2nd/1-String/regex2 BoostBook2nd/1-String/regex3 BoostBook2nd/1-String/regex4 +BoostBook2nd/1-String/regex5 BoostBook2nd/1-String/string_algo1 BoostBook2nd/1-String/string_algo2 BoostBook2nd/1-String/string_algo3 BoostBook2nd/1-String/string_algo4 BoostBook2nd/1-String/string_algo5 BoostBook2nd/1-String/tokenizer1 BoostBook2nd/1-String/tokenizer2 BoostBook2nd/1-String/tokenizer3 -BoostBook2nd/1-String/xpressive1 -BoostBook2nd/1-String/xpressive2 -BoostBook2nd/1-String/xpressive3 -BoostBook2nd/1-String/xpressive4 -BoostBook2nd/1-String/xpressive6 -BoostBook2nd/1-String/xpressive7 -BoostBook2nd/1-String/xpressive8 -BoostBook2nd/1-String/xpressive9 -BoostBook2nd/10-Misc/graph1 BoostBook2nd/10-Misc/param BoostBook2nd/10-Misc/po BoostBook2nd/10-Misc/signals1 BoostBook2nd/10-Misc/signals2 BoostBook2nd/10-Misc/ublas1 -BoostBook2nd/10-Misc/wave BoostBook2nd/2-SmartP/shared_ptr1 BoostBook2nd/2-SmartP/weak_ptr1 BoostBook2nd/3-System/filesystem1 BoostBook2nd/3-System/fsls BoostBook2nd/3-System/fsmv BoostBook2nd/3-System/gregorian1 BoostBook2nd/3-System/gregorian_calender -BoostBook2nd/3-System/posix_time1 -BoostBook2nd/3-System/posix_time2 BoostBook2nd/3-System/thread1 BoostBook2nd/4-IO/add_server BoostBook2nd/4-IO/addmul_server2 BoostBook2nd/4-IO/addmul_server3 BoostBook2nd/4-IO/asio1 BoostBook2nd/4-IO/asio2 BoostBook2nd/4-IO/asio3 BoostBook2nd/4-IO/gzview BoostBook2nd/4-IO/iostreams1 BoostBook2nd/4-IO/iostreams2 BoostBook2nd/4-IO/iostreams3 BoostBook2nd/4-IO/iostreams4 BoostBook2nd/4-IO/serialization1 BoostBook2nd/4-IO/serialization2 BoostBook2nd/4-IO/serialization4 BoostBook2nd/5-Math/crc1 BoostBook2nd/5-Math/crcchk BoostBook2nd/5-Math/interval1 BoostBook2nd/5-Math/interval2 BoostBook2nd/5-Math/quaternion1 BoostBook2nd/5-Math/quaternion2 BoostBook2nd/5-Math/random1 BoostBook2nd/5-Math/random2 BoostBook2nd/5-Math/random3 BoostBook2nd/5-Math/rational1 BoostBook2nd/6-Data/any1 BoostBook2nd/6-Data/any2 BoostBook2nd/6-Data/array1 BoostBook2nd/6-Data/array2 BoostBook2nd/6-Data/dynbitset1 BoostBook2nd/6-Data/dynbitset2 BoostBook2nd/6-Data/ite_adapt1 BoostBook2nd/6-Data/ite_facade1 BoostBook2nd/6-Data/multi_array1 BoostBook2nd/6-Data/multi_array2 BoostBook2nd/6-Data/multi_array3 BoostBook2nd/6-Data/optional1 BoostBook2nd/6-Data/range1 BoostBook2nd/6-Data/range2 BoostBook2nd/6-Data/tuple1 BoostBook2nd/6-Data/tuple2 BoostBook2nd/6-Data/variant1 BoostBook2nd/6-Data/variant2 BoostBook2nd/6-Data/variant3 BoostBook2nd/6-Data/variant4 BoostBook2nd/7-Func/bind1 BoostBook2nd/7-Func/bind2 BoostBook2nd/7-Func/bind3 BoostBook2nd/7-Func/bind4 -BoostBook2nd/7-Func/function1 -BoostBook2nd/7-Func/lambda1 BoostBook2nd/7-Func/spirit1 BoostBook2nd/7-Func/spirit10 BoostBook2nd/7-Func/spirit2 BoostBook2nd/7-Func/spirit3 BoostBook2nd/7-Func/spirit5 BoostBook2nd/7-Func/spirit6 -BoostBook2nd/7-Func/spirit7 BoostBook2nd/7-Func/spirit8 BoostBook2nd/7-Func/spirit9 BoostBook2nd/8-Meta/fusion2 BoostBook2nd/8-Meta/fusion3 BoostBook2nd/8-Meta/fusion4 BoostBook2nd/8-Meta/mpl1 BoostBook2nd/8-Meta/mpl2 BoostBook2nd/8-Meta/mpl3 BoostBook2nd/8-Meta/mpl4-5 BoostBook2nd/8-Meta/mplaf BoostBook2nd/8-Meta/pp3 BoostBook2nd/8-Meta/pp4 BoostBook2nd/8-Meta/type_traits1 BoostBook2nd/9-Util/assignment1 BoostBook2nd/9-Util/foreach1 BoostBook2nd/9-Util/ios_saver1 BoostBook2nd/9-Util/next1 BoostBook2nd/9-Util/operators1 BoostBook2nd/9-Util/ref1 BoostBook2nd/9-Util/timer1
2月15日実施分との差分は
+BoostBook2nd/10-Misc/ublas1 +BoostBook2nd/5-Math/random2 +BoostBook2nd/5-Math/random3 +BoostBook2nd/6-Data/optional1 +BoostBook2nd/7-Func/spirit1 +BoostBook2nd/7-Func/spirit10 +BoostBook2nd/7-Func/spirit2 +BoostBook2nd/7-Func/spirit3 +BoostBook2nd/7-Func/spirit5 +BoostBook2nd/7-Func/spirit6 +BoostBook2nd/7-Func/spirit8 +BoostBook2nd/7-Func/spirit9
となったが,注目すべきはboost::ublasやboost::spirit::classicといった代表的なExpression Templateを活用したライブラリがコンパイル可能になったこと.すげー.ちなみに,letsboost::spiritを試してみた限りだと,boost::spirit::qiは通らないようだ.
順調に準拠度は上がっているけど,結構基本的なところがまだ未実装だったりするから,実用にはまだ辛いかな.例えば,現時点では複合代入演算子の値をlvalueとして使えない,っていうのがある.テストケースとしては,
int& f(int& n) { return n += 1; }
が
test.cpp:3:9: error: cannot compile this l-value expression yet return n += 1; ^~~~~~ 1 diagnostic generated.
と言われて通らない.boost::lambdaのサンプルコードも+=使ってる部分を消せばコンパイルは通るんだよなあ.セグフォっちゃうけど.