Whole Tomato Software Forums
Whole Tomato Software Forums
Main Site | Profile | Register | Active Topics | Members | Search | FAQ
 All Forums
 Visual Assist
 Technical Support
 Syntax errors C++: lambda's and variadic templates

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
bta Posted - Jan 25 2016 : 05:19:33 AM
It seems that VAX cannot handle the variadic templates syntax, it always gives a syntax error.
Next to that sometimes it also has problems with lambda syntax.
(but not always though...)

See this code snippet for some examples.


#include <vector>
#include <memory>

namespace A
   {
   template <typename Arg>
   struct NotNull final
      {};

   template <typename TReturnType, typename... TArgs, typename FunctionType> // Syntax error on TArgs (variadic templates)
   std::unique_ptr<C1> foo(FunctionType function)
      {
      }
   }

namespace
   {
   class C1
      {};

   class C2
      {
      public:
         void f() {}
      };

   class C3
      {
      public:
         void bar()
            {
            auto lambda = [this](C2 &c2) -> std::vector<C1> { return{}; }; // Syntax error on std (or vector when std:: is removed)
                                                                           // no syntax error on c2

            A::foo<C1, A::NotNull<C2>>([this](C2 &c2) -> std::vector<C1> { return{}; }); // Syntax error on c2
                                                                                         // no syntax error on std
            }
      };
   }
7   L A T E S T    R E P L I E S    (Newest First)
feline Posted - Feb 03 2016 : 10:43:41 PM
VS2013 is doing something odd with this code.

Testing on a clean machine, there is no Visual Assist installed, and I get different underlining from the IDE depending on which file I paste the code into, but it always compiles. So no underlining on your system is helpful.

We are hoping to look at this bug fairly soon, but unfortunately I don't yet have an estimate for when this might be fixed. This thread should be updated when this has been fixed though.
bta Posted - Feb 03 2016 : 03:21:50 AM
Some info:
I just upgraded to your new build (10.9.2089), but with this one the same syntax error indications are given.

I also tried enabling Intellisense and all mentioned syntax errors are gone.

To be honest, there was an other error mentioned by Intellisense on the call of A::foo() telling that it was ambiguous.
In fact the code sample in the first post didn't compile. The class C1 was not known at foo() function implementation.
The real sample should be:

#include <vector>
#include <memory>

namespace
   {
   class C1
      {};
   }

namespace A
   {
   template <typename Arg>
   struct NotNull final
      {};

   template <typename TReturnType, typename... TArgs, typename FunctionType> // Syntax error on TArgs (variadic templates)
   std::unique_ptr<C1> foo(FunctionType function)
      {
      return std::unique_ptr<C1>(nullptr);
      }
   }

namespace
   {
   class C2
      {
      public:
         void f()
            {
            }
      };

   class C3
      {
      public:
         void bar()
            {
            auto lambda = [this](C2 &c2) -> std::vector<C1> { return{}; }; // Syntax error on std (or vector when std:: is removed)
            // no syntax error on c2

            A::foo<C1, A::NotNull<C2>>([this](C2 &c2) -> std::vector<C1> { return{}; }); // Syntax error on c2
            // no syntax error on std
            }
      };
   }



We'll still need to further validate the option of re-enabling the intellisense.
However, still hoping we can use VAX alone!
feline Posted - Feb 02 2016 : 7:09:16 PM
I am glad to hear that VA handled your solution so well, it is always good to hear about our successes

The IDE intellisense parser has improved with time, but you do risk running two parsers and using the extra hard drive space. Still, perhaps it will work better now for you.
bta Posted - Feb 02 2016 : 03:06:43 AM
The reason for turning of the IDE intellisense (for several years now already) was that it was too slow and didn't even give us correct results for our project size (20.000+ cpp files, 25.000+ header files).
The results from VAX were way better.
So we decided on saving disk space/power consumption by disabling it completely.

I'll see if I can turn it on again and let you know if it helps...
feline Posted - Jan 29 2016 : 2:21:58 PM
Ah, my mistake, I did not think to check the effect of disabling the IDE intellisense, I am seeing the same problem here once I disable the IDE intellisense database:

case=94742

You are quite right, this is bug / limitation in our parser. If you have a lot of code like this have you considered turning the IDE intellisense database back on? Obviously you turned it off for a reason, so you will have to consider if the trade off is worth it.
bta Posted - Jan 26 2016 : 03:10:04 AM
Feline,

no, I do not see this underlining when I disable VAX.
So I guess it is VAX that is providing this functionality?
I'm working with VS2013 Update 5:

VA_X.dll file version 10.9.2086.0 built 2015.12.16
DevEnv.exe version 12.0.40629.0 Professional
msenv.dll version 12.0.40629.0

Note that I have the IntelliSense turned off completely.
feline Posted - Jan 25 2016 : 6:58:34 PM
If you disable VA, via:

VAssistX -> Enable/Disable Visual Assist X

do you still see this underlining? I am seeing this underlining in VS2015 Update 1, even on a machine where VA has never been installed.

The more recent IDE's added C++ underlining, and when this is happening VA steps back and lets the IDE to the underlining, which is what is happening in this case.

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