title: Specifying go build's version of C++
body: <p>I'm trying to build a go project that uses a third party library (GDAL) that's written in C and C++.  I've run into this error:</p>
  
  <pre><code>In file included from contour.cpp:31:0:
  cpl_port.h:187:6: error: #error Must have C++11 or newer.
   #    error Must have C++11 or newer.
        ^
  In file included from C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/type_traits:35:0,
                   from cpl_conv.h:372,
                   from contour.cpp:39:
  C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
   #error This file requires compiler and library support for the \
    ^
  </code></pre>
  
  <p>Some searching tells me this is expected, and the fix is to simply set a flag on the compiler (<a href="https://stackoverflow.com/questions/10363646/compiling-c11-with-g">not go related, but still pertinent</a>).</p>
  
  <p>I've read through <a href="https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies" rel="nofollow noreferrer">go's documentation</a> on building, and while it suggests it's possible to specify options to individual compilers, it doesn't explicitly spell out how, nor does it provide any examples.</p>
  
  <p>I've tried the following just guessing, and while the go build command accepts them, they produce the same error, so they don't work.</p>
  
  <pre><code>go build -gcflags -std=gnu++11 -ldflags -std=gnu++11
  go build -gcflags -std=c++11 -ldflags -std=c++11
  go build -gcflags -std=c++11
  go build -gcflags -std=all=gnu++11 -ldflags -std=all=gnu++11
  </code></pre>
  
  <p>How can I tell go to tell gcc to compile with C++11 or newer?</p>
  
  <p>Edit: As requested by PeterSO:</p>
  
  <pre><code>H:\&gt;go version
  go version go1.10.2 windows/amd64
  
  H:\&gt;go env
  set GOARCH=amd64
  set GOBIN=
  set GOCACHE=C:\Users\ksexton\AppData\Local\go-build
  set GOEXE=.exe
  set GOHOSTARCH=amd64
  set GOHOSTOS=windows
  set GOOS=windows
  set GOPATH=H:\ksexton\Go;
  set GORACE=
  set GOROOT=C:\Go
  set GOTMPDIR=
  set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
  set GCCGO=gccgo
  set CC=gcc
  set CXX=g++
  set CGO_ENABLED=1
  set CGO_CFLAGS=-g -O2
  set CGO_CPPFLAGS=
  set CGO_CXXFLAGS=-g -O2
  set CGO_FFLAGS=-g -O2
  set CGO_LDFLAGS=-g -O2
  set PKG_CONFIG=pkg-config
  set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\ksexton\AppData\Local\Temp\go-build937852322=/tmp/go-build -gno-record-gcc-switches
  
  H:\&gt;gcc --version
  gcc (tdm64-1) 5.1.0
  Copyright (C) 2015 Free Software Foundation, Inc.
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  
  H:\&gt;g++ --version
  g++ (tdm64-1) 5.1.0
  Copyright (C) 2015 Free Software Foundation, Inc.
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  </code></pre>