Bug in 3.6.7

Is it just me or anyone else having a problem compiling with VST 3.6.7

The line that chokes is in file:

VST3_SDK/base/source/updatehandler.cpp

Line: 523

table->defered.erase (it);

with the error:

No matching member function for call to ‘erase’

The problem seems that it is a const_iterator (Line 123):

typedef DeferedChangeList::const_iterator DeferedChangeListIterConst;

changing the typedef to a non const:

typedef DeferedChangeList::iterator DeferedChangeListIterConst;

and the project compiles okay…

So I guess the correct solution would be to add after line 123:

typedef DeferedChangeList::iterator DeferedChangeListIter;

and then in line 512 change the declaration to:

Update::DeferedChangeListIter it =

Anyone else?

Rail

which compiler do you use ?

Xcode 8.2.1

LLVM 8.0

C++ Language Dialect: C++11 [-std=c++11]

I noticed that someone else also reported this same bug on the JUCE forum.

https://forum.juce.com/t/vst-sdk-v3-6-7-and-compiler-error-when-building-juce-plugin/21282/12

Rail

I got the same issue, it happens only when using -stdlib=libstdc++.
Since on macosx >= 10.9 (after Mavericks) libc++ is the default, I stumbled on this only while building something with deployment target 10.7, so forcing libstdc++ (libc++ is not supported on 10.7).
Steinberg release notes say this is the last version of the SDK supporting C++98, I think it would be nice to have an official fix for this issue: it fails building with stdlibc++ for just that line that uses a const_iterator, using a not-const iterator fixes the error.

I ended patching manually UpdateHandler::triggerDeferedUpdate, adding something like

//including a cxxx header to implicitly define _LIBCPP_VERSION when using libc++
#include <cstddef>

#ifdef _LIBCPP_VERSION
	//building with libc++	
	Update::DeferedChangeListIterConst it = std::find (table->defered.begin (), table->defered.end (), tmp);
#else
	//building with stdlibc++	
	Update::DeferedChangeList::iterator it = std::find (table->defered.begin (), table->defered.end (), tmp);
#endif

This way patched version is choosed only when using stdlibc++.
BTW is it safe to simply use a non-const iterator or does someone have smarter/safer suggestions? (e.g. using Jon Kalb trick https://stackoverflow.com/a/10669041/3385980)

Dario