Parsing cpp code with parameterized types

I try to parse the following C++ code with bblfsh:
It seems that bblfsh interprets incorrectly parameterized types like std::deque<std::string>

#include <string>
#include <deque>
#include <iostream>

class ParameterizedType {
    public:
        std::deque<std::string> sortPerm(std::string permissions[]);
};

/**
 *  declaration of Parameterized types
 *  @return std::deque<std::string>
 */
    std::deque<std::string> ParameterizedType::sortPerm(std::string permissions[]) {
        // std::string result(0);               // OK, node is cpp:CPPASTDeclarationStatement
        std::deque<std::string>result(0); // NOK, node is cpp:CPPASTBinaryExpression
        return  result;
    }

And here is my code to identify where is the problem:

import bblfsh

def main():
    client = bblfsh.BblfshClient("0.0.0.0:9432")
    ctx = client.parse('ParameterizedType.cpp')
    for unode in ctx.filter("//uast:Function"):
        func_node = unode.get()
        assert func_node['@type'] == 'uast:Function'

        block_node = func_node['Body']
        assert block_node['@type'] == 'uast:Block'

        cpp_expression_statement_node = block_node['Statements'][0]
        assert cpp_expression_statement_node['@type'] == 'cpp:CPPASTExpressionStatement'

        cpp_binary_expression_node = cpp_expression_statement_node['Prop_Expression']
        print('type=',cpp_binary_expression_node['@type'])
        assert cpp_binary_expression_node['@type'] == 'cpp:CPPASTDeclarationStatement'

        break
        
if __name__ == '__main__':
   main()

Is this some limitation of C+ driver?

Olivier Mesnard

Should be moved to Projects/bblfsh

Hi, Olivier,

I’m pretty sure this is a bug in the C++ driver, and I have filed https://github.com/bblfsh/cpp-driver/issues/70 to track it.

Thanks,
–M