]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common: instantiate strict_si_cast<long> not strict_si_cast<int64_t> 10855/head
authorKefu Chai <kchai@redhat.com>
Sat, 25 Jun 2016 17:02:03 +0000 (01:02 +0800)
committerLoic Dachary <ldachary@redhat.com>
Thu, 25 Aug 2016 07:09:53 +0000 (09:09 +0200)
this fixes the build on armf.

on 32bit platforms, cstdint is very likely to

 typedef long long int int64_t;

this results in compilation error like

 `common/strtol.cc:190:75: error: duplicate explicit instantiation of 'T
 strict_si_cast(const char, std::string) [with T = long long int;
 std::string = std::basic_string]'

 [-fpermissive]
 template int64_t strict_si_cast(const char *str, std::string *err);
 ^`

we can address this by instantiate the primitive type of `long long`
instead of `in64_t`.

Fixes: http://tracker.ceph.com/issues/16398
Signed-off-by: Kefu Chai <kchai@redhat.com>
(cherry picked from commit 31db4c5f9f725e13e38f3c90744e299e023d02a4)

src/common/strtol.cc

index 0e7ea7d3011476cb2c39855b7d188af07cceb33d..321521d1f2df47e6367ec522314404f0ee13724c 100644 (file)
@@ -186,8 +186,8 @@ T strict_si_cast(const char *str, std::string *err)
 }
 
 template int strict_si_cast<int>(const char *str, std::string *err);
+template long strict_si_cast<long>(const char *str, std::string *err);
 template long long strict_si_cast<long long>(const char *str, std::string *err);
-template int64_t strict_si_cast<int64_t>(const char *str, std::string *err);
 template uint64_t strict_si_cast<uint64_t>(const char *str, std::string *err);
 template uint32_t strict_si_cast<uint32_t>(const char *str, std::string *err);