Whole Tomato Software Forums
Whole Tomato Software Forums
Main Site | Profile | Register | Active Topics | Members | Search | FAQ
 All Forums
 Visual Assist
 Technical Support
 boost::optional

You must be registered to post a reply.
Click here to register.

Screensize:
UserName:
Password:
Format: BoldItalicizeUnderlineStrikethrough Align leftCenterAlign right Insert horizontal ruleUpload and insert imageInsert hyperlinkInsert email addressInsert codeInsert quoted textInsert listInsert Emoji
   
Message:

Forum code is on.
Html is off.

 
Check to subscribe to this topic.
   

T O P I C    R E V I E W
Frunobulax Posted - Feb 18 2011 : 04:51:38 AM
Hi,

do you have any update on the parsing of boost::optional?

The bug report is more than 2 years old (http://forum.wholetomato.com/forum/topic.asp?TOPIC_ID=7249, case 2154 was already open at the time).

The inability to parse optionals is a major problem because we rely heavily on optionals, and all VAX completion features stop working once an optional is in play.

I will recommend to my company to not renew maintenance until this problem is solved.

Regards, tv
4   L A T E S T    R E P L I E S    (Newest First)
feline Posted - Feb 24 2011 : 10:58:14 PM
Thank you for this
guest Posted - Feb 22 2011 : 11:17:43 AM
You can also try this, which covers most of the important stuff inside boost::optional.

/* boost::optional */
namespace boost
{
   namespace optional_detail
   {
      /* boost::optional default types */
      template<class T>
      struct types_when_isnt_ref
      {
         typedef T const &reference_const_type;
         typedef T       &reference_type;
         typedef T const *pointer_const_type;
         typedef T       *pointer_type;
         typedef T const &argument_type;
      };

      template <class T>
      class __optional_types : public types_when_isnt_ref<T>
      {
      };

      /* boost::optional types for references */
      template<class T>
      struct types_when_is_ref
      {
         typedef T raw_type;

         typedef raw_type& reference_const_type;
         typedef raw_type& reference_type;
         typedef raw_type* pointer_const_type;
         typedef raw_type* pointer_type;
         typedef raw_type& argument_type;
      };

      template <class T>
      class __optional_types<T &> : public types_when_is_ref<T>
      {
      };

      struct optional_tag
      {
      };

      template<class T>
      class optional_base : public optional_tag
      {
         protected:
          typedef T value_type;

          typedef __optional_types<T> types;

          typedef typename types::reference_type       reference_type;
          typedef typename types::reference_const_type reference_const_type;
          typedef typename types::pointer_type         pointer_type;
          typedef typename types::pointer_const_type   pointer_const_type;
          typedef typename types::argument_type        argument_type;
      };
   }

   template <class T>
   class optional : public optional_detail::optional_base<T>
   {
      typedef optional_detail::optional_base<T> base;

   public:
      typedef optional<T> this_type;

      typedef typename base::value_type           value_type;
      typedef typename base::reference_type       reference_type;
      typedef typename base::reference_const_type reference_const_type;
      typedef typename base::pointer_type         pointer_type;
      typedef typename base::pointer_const_type   pointer_const_type;
      typedef typename base::argument_type        argument_type;

      reference_const_type get() const;
      reference_type       get();

      reference_const_type get_value_or(reference_const_type v) const;
      reference_type       get_value_or(reference_type       v);

      pointer_const_type operator->() const;
      pointer_type       operator->();

      reference_const_type operator *() const;
      reference_type       operator *();
   };
}
Frunobulax Posted - Feb 22 2011 : 05:27:10 AM
quote:
Originally posted by feline

Apologies for the slow progress on this. This is still down as a high priority bug, but some of the boost libraries are very complex and difficult for VA to parse.

I have found a pair of possible work arounds that might help you. The first work around is to add this to VA's StdAfx.h file:

namespace boost {
    template<typename T> class optional {
        T* operator->()
        {
            
        }
    };
}


this is working for me, using a simple test case. Hopefully this will work for you, without requiring you to make any edits to your code.



Works like a charm. (Good, because modifying code is not an option in this case.) Thanks for the workaround.

tv
feline Posted - Feb 18 2011 : 12:57:41 PM
Apologies for the slow progress on this. This is still down as a high priority bug, but some of the boost libraries are very complex and difficult for VA to parse.

I have found a pair of possible work arounds that might help you. The first work around is to add this to VA's StdAfx.h file:

namespace boost {
    template<typename T> class optional {
        T* operator->()
        {
            
        }
    };
}


this is working for me, using a simple test case. Hopefully this will work for you, without requiring you to make any edits to your code.

My second work around is to add

#define VA_BOOST_OPTIONAL(x) x

to VA's StdAfx.h file, but I then had to modify my test code, giving me:

#include <set>
#include <boost/optional.hpp>

#define VA_BOOST_OPTIONAL(x) boost::optional< x >

void test(void) {
	boost::optional<std::set<long> > maybeSet1 = std::set<long>();
	VA_BOOST_OPTIONAL(std::set<long>) maybeSet2 = std::set<long>();

	maybeSet1->insert(0);	// underlined
	maybeSet2->insert(0);	// no underlining, and listbox works
};


Edit VA's "StdAfx.h" file as explained in this FAQ entry:

http://docs.wholetomato.com?W302

add the entries at the bottom, making sure there is a blank line at the end of the file. This file is used to help VA's parser with difficult code, and can be used to work around odd effects. After modifying this file you need to rebuild the VA symbol database for the changes to take effect:

VA Options -> Performance -> General -> Rebuild symbol databases

© 2023 Whole Tomato Software, LLC Go To Top Of Page
Snitz Forums 2000