[FreeBSD-users-jp 95509] Re: 32ビット環境と64ビット環境でコンパイル結果が異なる(deskutils/taskwarrior)
pegacorn
subscriber.jp at gmail.com
Wed Apr 8 12:18:29 UTC 2015
手元に32ビット版FreeBSD(time_t==int)の環境が無いのでCygwin(time_t==longなのでちょっと違う)でしか確認していませんが、テストコード以外で「const
enum type new_type」を省略している所は無さそうですので、Variantクラスのコンストラクターの修正だけでビルドできると思います。
ビルドが成功したら「make test」を実行してみて、全テストケースをパスしたら動くかもしれません。
src/Variant.h | 2 +-
test/variant_cast.t.cpp | 12 ++++++------
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/src/Variant.h b/src/Variant.h
index 6780ace..b49f313 100644
--- a/src/Variant.h
+++ b/src/Variant.h
@@ -49,7 +49,7 @@ public:
Variant (const double);
Variant (const std::string&);
Variant (const char*);
- Variant (const time_t, const enum type new_type = type_date);
+ Variant (const time_t, const enum type new_type);
~Variant ();
void source (const std::string&);
diff --git a/test/variant_cast.t.cpp b/test/variant_cast.t.cpp
index 63430b0..9799c9d 100644
--- a/test/variant_cast.t.cpp
+++ b/test/variant_cast.t.cpp
@@ -176,24 +176,24 @@ int main (int argc, char** argv)
t.is (v35b.get_duration (), 3628800, "cast string --> duration");
// Variant::type_date --> *
- Variant v40 ((time_t) 1234567890);
+ Variant v40 ((time_t) 1234567890, Variant::type_date);
v40.cast (Variant::type_boolean);
t.ok (v40.type () == Variant::type_boolean, "cast date --> boolean");
t.ok (v40.get_bool () == true, "cast date --> boolean");
- Variant v41 ((time_t) 1234567890);
+ Variant v41 ((time_t) 1234567890, Variant::type_date);
v41.cast (Variant::type_integer);
t.ok (v41.type () == Variant::type_integer, "cast date --> integer");
t.ok (v41.get_integer () == 1234567890, "cast date --> integer");
- Variant v42 ((time_t) 1234567890);
+ Variant v42 ((time_t) 1234567890, Variant::type_date);
v42.cast (Variant::type_real);
t.ok (v42.type () == Variant::type_real, "cast date --> real");
t.is (v42.get_real (), 1234567890.0, EPSILON, "cast date --> real");
// YYYY-MM-DDThh:mm:ss
// ^ ^ ^ ^ ^
- Variant v43 ((time_t) 1234567890);
+ Variant v43 ((time_t) 1234567890, Variant::type_date);
v43.cast (Variant::type_string);
t.ok (v43.type () == Variant::type_string, "cast date --> string");
std::string s = v43.get_string ();
@@ -204,12 +204,12 @@ int main (int argc, char** argv)
t.is ((int)s[16], (int)':', "cast date --> string");
t.is ((int)s.length (), 19, "cast date --> string");
- Variant v44 ((time_t) 1234567890);
+ Variant v44 ((time_t) 1234567890, Variant::type_date);
v44.cast (Variant::type_date);
t.ok (v44.type () == Variant::type_date, "cast date --> date");
t.ok (v44.get_date () == 1234567890, "cast date --> date");
- Variant v45 ((time_t) 1234567890);
+ Variant v45 ((time_t) 1234567890, Variant::type_date);
v45.cast (Variant::type_duration);
t.ok (v45.type () == Variant::type_duration, "cast date --> duration");
t.ok (v45.get_duration () == 1234567890, "cast date --> duration");
2015年4月8日 17:32 User Ribbon <ribbon at ns.ribbon.or.jp>:
> FreeBSD32ビット環境だと、上記のようにVariantの定義が重複して
> うまくない、ということなのですね。
>
> ただ、この先どうするかはC++が分かっていないので、ちょっと手の出しようがないです。
> ですので、とりあえずはあきらめることにします。
--
pegacorn
More information about the freebsd-users-jp
mailing list