[
https://issues.apache.org/jira/browse/MESOS-10028?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16966519#comment-16966519
]
Benjamin Bannier commented on MESOS-10028:
------------------------------------------
This issue is due to disagreement between GCC & Clang, and MSVC around this
piece of code:
{code}
const size_t childRoleLength = 36u;
vector<string> roles(param.roleCount);
std::generate(roles.begin(), roles.end(), [&randString]() {
return "role-" + randString(childRoleLength);
});
{code}
I believe {{childRoleLength}} is ODR-used here since it is {{const}} and
initialized by a constant expression. With that, I believe it should be
implicitly captured, http://eel.is/c++draft/expr.prim.lambda.capture#7.3, but
MSVC seems to disagree.
We could work around this by either capturing {{childRoleLength}} by value and
marking the lambda with some {{NOLINT}}, or maybe simpler, remove the {{const}}
qualifier from {{childRoleLength}}.
Could you look into this [~mzhu]?
> Mesos failed to build due to error C3493 on windows with MSVC
> -------------------------------------------------------------
>
> Key: MESOS-10028
> URL: https://issues.apache.org/jira/browse/MESOS-10028
> Project: Mesos
> Issue Type: Bug
> Components: build
> Affects Versions: master
> Environment: VS 2017 + Windows Server 2016
> Reporter: LinGao
> Priority: Major
> Attachments: log_x64_build.log
>
>
> Mesos failed to build due to error C3493: 'childRoleLength' cannot be
> implicitly captured because no default capture mode has been specified on
> Windows using MSVC. It can be first reproduced on 69e92ae reversion on master
> branch. Could you please take a look at this isssue? Thanks a lot!
>
> Reproduce steps:
> 1. git clone -c core.autocrlf=true https://github.com/apache/mesos
> D:\mesos\src
> 2. Open a VS 2017 x64 command prompt as admin and browse to D:\mesos
> 3. cd src
> 4. .\bootstrap.bat
> 5. cd ..
> 6. mkdir build_x64 && pushd build_x64
> 7. cmake ..\src -G "Visual Studio 15 2017 Win64"
> -DCMAKE_SYSTEM_VERSION=10.0.17134.0 -DENABLE_LIBEVENT=1
> -DHAS_AUTHENTICATION=0 -DPATCHEXE_PATH="C:\gnuwin32\bin" -T host=x64
> 8. msbuild Mesos.sln /p:Configuration=Debug /p:Platform=x64 /maxcpucount:4
> /t:Rebuild
>
> ErrorMessage:
> D:\mesos\src\src\tests\hierarchical_allocator_tests.cpp(8455): error C3493:
> 'childRoleLength' cannot be implicitly captured because no default capture
> mode has been specified
--
This message was sent by Atlassian Jira
(v8.3.4#803005)