[ 
https://issues.apache.org/jira/browse/PROTON-1831?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16460834#comment-16460834
 ] 

Robbie Gemmell commented on PROTON-1831:
----------------------------------------

As the PR also had the wrong JIRA key in it and wasn't updated, none of the 
comments here relate to Kims originally reported issue.

I've cloned the original issue to PROTON-1840, look there instead for it.

> [C++ binding] Nested complex types fail compilation with "incomplete type" 
> error
> --------------------------------------------------------------------------------
>
>                 Key: PROTON-1831
>                 URL: https://issues.apache.org/jira/browse/PROTON-1831
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: cpp-binding
>            Reporter: Kim van der Riet
>            Assignee: Alan Conway
>            Priority: Major
>
> When using nested complex types (for example, a list of maps or an array of 
> lists), the compiler fails to compile. For example, the following code 
> snippet (saved as {{ctt.cpp}}):
> {noformat}
> #include <map>
> #include <vector>
> #include <proton/types.hpp>
> int main(int, char**) {
>     std::map<proton::value, proton::value> m1 = {{uint8_t(0), "zero"}, 
> {uint8_t(1), "one"}};
>     std::map<proton::value, proton::value> m2 = {{true, "true"}, {false, 
> "false"}};
>     std::vector<std::map<proton::value, proton::value> > am = {m1, m2};
>     proton::value pv = am;
> }{noformat}
> fails compilation with the following error:
> {noformat}
> In file included from install/include/proton/types.hpp:47:0,
> from ctt.cpp:3:
> install/include/proton/./codec/vector.hpp: In instantiation of 
> ‘proton::codec::encoder& proton::codec::operator<<(proton::codec::encoder&, 
> const std::vector<_Tp, _Alloc>&) [with T = std::map<proton::value, 
> proton::value>; A = std::allocator<std::map<proton::value, proton::value> >]’:
> install/include/proton/./value.hpp:84:11: required from ‘typename 
> proton::value::assignable<T, proton::value&>::type 
> proton::value::operator=(const T&) [with T = 
> std::vector<std::map<proton::value, proton::value> >; typename 
> proton::value::assignable<T, proton::value&>::type = proton::value&]’
> install/include/proton/./value.hpp:79:85: required from 
> ‘proton::value::value(const T&, typename proton::value::assignable<T>::type*) 
> [with T = std::vector<std::map<proton::value, proton::value> >; typename 
> proton::value::assignable<T>::type = void]’
> ctt.cpp:9:24: required from here
> install/include/proton/./codec/vector.hpp:39:31: error: incomplete type 
> ‘proton::internal::type_id_of<std::map<proton::value, proton::value> >’ used 
> in nested name specifier
>     return e << encoder::array(x, internal::type_id_of<T>::value);
>                 ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> {noformat}
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to