<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Wed Feb 07 21:58:14 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>MongoDB Jira</title>
    <link>https://jira.mongodb.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.7.1</version>
        <build-number>970001</build-number>
        <build-date>13-04-2023</build-date>
    </build-info>


<item>
            <title>[CXX-113] C++ driver should not require any boost libs to use</title>
                <link>https://jira.mongodb.org/browse/CXX-113</link>
                <project id="11980" key="CXX">C++ Driver</project>
                    <description>&lt;p&gt;Linking with the mongodb c++ driver one might see&lt;/p&gt;

&lt;p&gt;boost::system::get_system_category&lt;/p&gt;

&lt;p&gt;if boost libs are not included.  I don&apos;t see why it is necessary to have anything beyond headers to use the MongoDB C++ driver in practice, so we should try to make that happen.&lt;/p&gt;</description>
                <environment></environment>
        <key id="13002">CXX-113</key>
            <summary>C++ driver should not require any boost libs to use</summary>
                <type id="4" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14710&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="3" iconUrl="https://jira.mongodb.org/images/icons/priorities/major.svg">Major - P3</priority>
                        <status id="6" iconUrl="https://jira.mongodb.org/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="2">Won&apos;t Fix</resolution>
                                        <assignee username="-1">Unassigned</assignee>
                                    <reporter username="dwight@mongodb.com">Dwight Merriman</reporter>
                        <labels>
                            <label>cxxmove</label>
                            <label>legacy-cxx</label>
                    </labels>
                <created>Sat, 4 Sep 2010 06:45:33 +0000</created>
                <updated>Mon, 12 Dec 2022 08:56:09 +0000</updated>
                            <resolved>Wed, 7 Jan 2015 16:40:25 +0000</resolved>
                                                                    <component>Implementation</component>
                                        <votes>5</votes>
                                    <watches>9</watches>
                                                                                                                <comments>
                            <comment id="799100" author="adam.midvidy" created="Wed, 7 Jan 2015 16:40:25 +0000"  >&lt;p&gt;While we have reduced the boost dependencies in the driver as much as possible, it is not reasonable to reduce them entirely without requiring C++11. &lt;/p&gt;</comment>
                            <comment id="562895" author="acm" created="Fri, 25 Apr 2014 15:04:52 +0000"  >&lt;p&gt;Here is a collection of boost symbols used in the driver and notes on analogues in C++11.&lt;/p&gt;

&lt;div class=&apos;table-wrap&apos;&gt;
&lt;table class=&apos;confluenceTable&apos;&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;th class=&apos;confluenceTh&apos;&gt; boost symbol &lt;/th&gt;
&lt;th class=&apos;confluenceTh&apos;&gt; C++11 symbol &lt;/th&gt;
&lt;th class=&apos;confluenceTh&apos;&gt; notes &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::bind&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::bind &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; Easy &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::condition &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::condition&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; Easy &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::date_time::winapi::file_time_to_microseconds &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; ? &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; ? &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::disable_if_c &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::enable_if &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; Need to reverse sense &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::enable_if_c &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::enable_if &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::function &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::function &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; Easy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::gregorian::date &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::chrono? &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; Might be very hard to shim &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::hash_combine &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; ? &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; Might be very hard to shim, but could write our own &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::intrusive_ptr &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; ? &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; No analogue in C++ std:: &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::lexical_cast &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; ? &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::make_shared &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::make_shared &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::mutex::scoped_lock &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::mutex &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::mutex &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::mutex &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::noncopyable &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; ? &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; Switch to using DISALLOW_EVIL_CONSTRUCTORS? &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::posix_time::hours &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::chrono? &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::posix_time::ptime &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::chrono? &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::posix_time::second_clock::local_time &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::chrono? &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::posix_time::seconds &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::chrono? &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::posix_time &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::chrono? &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::ref &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::ref &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::scoped_array&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::unique_ptr&amp;lt;T[]&amp;gt; &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; hard to arrange shim &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::scoped_ptr &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::unique_ptr&amp;lt;T&amp;gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::shared_ptr &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::shared_ptr &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; Easy &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::thread::sleep &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::thread? &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::thread_specific_ptr &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; ? &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::thread &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::thread &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; Easy &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::unique_lock &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::unique_lock &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; boost::xtime &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; std::chrono? &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
</comment>
                            <comment id="561831" author="acm" created="Thu, 24 Apr 2014 16:59:32 +0000"  >&lt;p&gt;We have actually already eliminated two of the four boost link dependencies on the legacy branch. We no longer depend on filesystem or program_options. We still do depend on boost::thread and boost::system, these are not so easily eliminated in C++03 without writing our own portability wrappers around system primitives for mutexes, threads, etc. That is a significant undertaking and probably not something that we are going to attempt in the legacy driver.&lt;/p&gt;

&lt;p&gt;Most of our boost dependencies are, interestingly, obviated by C&amp;#43;&amp;#43;11. It might be possible to organize things in the driver such that when built in C&amp;#43;&amp;#43;11 mode we have no boost dependencies. We would need to audit the existing boost usages and ensure that each had an analogue in C&amp;#43;&amp;#43;11.&lt;/p&gt;</comment>
                            <comment id="561821" author="dwight_10gen" created="Thu, 24 Apr 2014 16:52:41 +0000"  >&lt;p&gt;i think there are a couple of possible levels of usage.  firstly, today, suspect you need the libraries for linking, which is the high end of boost requirements.  second, one might imagine using a few boost things that are fairly lightweight like smart pointers, but that&apos;s it, and it&apos;s all header-only stuff.  even better but more effort perhaps would be to use nothing from boost at all.&lt;/p&gt;

&lt;p&gt;avoiding the libraries for linking might be not too hard.  and that would be good as boost lib building can occasionally be a pain on some platforms and it one more thing to deal with.&lt;/p&gt;</comment>
                            <comment id="512526" author="acm" created="Mon, 10 Mar 2014 15:39:50 +0000"  >&lt;p&gt;We can evaluate what we are requiring from boost once we have finished stripping the driver down in the new repository. If the dependencies are quite minimal it may be possible, especially if the majority of uses are smart pointer types which we may be able to obtain via tr1 or C++11, or just hand roll.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                                        </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                            <outwardlinks description="related to">
                                                        </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_15850" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hribsn:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10558" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>20558</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            </customfields>
    </item>
</channel>
</rss>