Skip to content

Commit c0dc78f

Browse files
Fixed compilation errors under GCC 5.4 (#1094)
GCC 5.4 not able to construct ApiResponse::ResultType due to the ambiguity of constructors during braced initialization Relates-To: OAM-756 Signed-off-by: Andrey Kashcheev <[email protected]>
1 parent 68d5d80 commit c0dc78f

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

olp-cpp-sdk-dataservice-read/src/JsonResultParser.h

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,28 @@ namespace parser {
3333
template <typename OutputResult,
3434
typename ParsingType = typename OutputResult::ResultType,
3535
typename... AdditionalArgs>
36-
OutputResult parse_result(std::stringstream& json_stream,
37-
const AdditionalArgs&... args) {
36+
typename std::enable_if<
37+
std::is_constructible<ParsingType, ParsingType, AdditionalArgs...>::value,
38+
OutputResult>::type
39+
parse_result(std::stringstream& json_stream, const AdditionalArgs&... args) {
40+
bool res = true;
41+
auto obj = parse<ParsingType>(json_stream, res);
42+
43+
if (res) {
44+
return ParsingType(std::move(obj), args...);
45+
} else {
46+
return {
47+
client::ApiError(client::ErrorCode::Unknown, "Fail parsing response.")};
48+
}
49+
}
50+
51+
template <typename OutputResult,
52+
typename ParsingType = typename OutputResult::ResultType,
53+
typename... AdditionalArgs>
54+
typename std::enable_if<
55+
!std::is_constructible<ParsingType, ParsingType, AdditionalArgs...>::value,
56+
OutputResult>::type
57+
parse_result(std::stringstream& json_stream, const AdditionalArgs&... args) {
3858
bool res = true;
3959
auto obj = parse<ParsingType>(json_stream, res);
4060

olp-cpp-sdk-dataservice-write/src/JsonResultParser.h

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,28 @@ namespace parser {
3333
template <typename OutputResult,
3434
typename ParsingType = typename OutputResult::ResultType,
3535
typename... AdditionalArgs>
36-
OutputResult parse_result(std::stringstream& json_stream,
37-
const AdditionalArgs&... args) {
36+
typename std::enable_if<
37+
std::is_constructible<ParsingType, ParsingType, AdditionalArgs...>::value,
38+
OutputResult>::type
39+
parse_result(std::stringstream& json_stream, const AdditionalArgs&... args) {
40+
bool res = true;
41+
auto obj = parse<ParsingType>(json_stream, res);
42+
43+
if (res) {
44+
return ParsingType(std::move(obj), args...);
45+
} else {
46+
return {
47+
client::ApiError(client::ErrorCode::Unknown, "Fail parsing response.")};
48+
}
49+
}
50+
51+
template <typename OutputResult,
52+
typename ParsingType = typename OutputResult::ResultType,
53+
typename... AdditionalArgs>
54+
typename std::enable_if<
55+
!std::is_constructible<ParsingType, ParsingType, AdditionalArgs...>::value,
56+
OutputResult>::type
57+
parse_result(std::stringstream& json_stream, const AdditionalArgs&... args) {
3858
bool res = true;
3959
auto obj = parse<ParsingType>(json_stream, res);
4060

0 commit comments

Comments
 (0)