60

Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Embed Size (px)

Citation preview

Page 1: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015
Page 2: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

#Build2016

Top 6 Reasons to Move Your C++ Code to Visual Studio 2015Ankit AsthanaSenior PM

Andrew HallPM Manager

Marian LuparuPM Manager

B880

Page 3: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

#Build2016

Ankit AsthanaSenior PM

B880

Reasons to Move your C++ Code to Visual Studio6 2015

Marian LuparuPM Manager

Andrew HallPM Manager

Page 4: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Release• 20 Jul 2015

Update 1• 30 Nov 2015

Update 2• 30 Mar 2016

Update 3• TBD

Visual Studio 2015CommunityProfessional Enterprise

Page 5: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Benefit from day one6#

Reasons to Move your C++ Code to Visual Studio6 201

5

Page 6: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Build your code using an older toolsetin Visual Studio 2015

Page 7: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Your code builds faster with 2015

BUILDDEBUGEDIT

Developer does this #40 times a day (Linker)

CLEAN BUILD

Product build nightly! (Compiler)

Page 8: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Your code builds faster with 2015

• VS2015 linker is on average 2x faster when performing a clean link for Non Whole Program Optimized builds.

• VS2015 linker is multi-x faster for new edits now supported by incremental linking.

K i n ec t S p o rts Ri val (Xb o x On e)

F o rza (Xb o x On e) Des ti n y (Xb o x On e) Ch ro me

680

138

84

573

68 61

8

327

Clean Link Times with VS2015 (sec)VS2013 RTM VS2015 RTM

• /Debug:fastlink

• /Zc:inline

• Incremental linking for static libraries

• Linker multi-threading

VS2015 introduces…

Many Link Improvements

Page 9: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Your code builds faster with 2015• Whole Program Optimized (WPO) or LTCG builds perform optimizations

(Inlining, Register Allocation, Value Propagation) across source files and across modules.

• WPO improves runtime performance by low single digits (CPU).

• Minor edits in source code today result in full code generation for WPO builds.

• /ltcg:incremental makes these changes incremental in nature without sacrificing code-quality.

“Self build for the backend compiler ‘C2.dll’ with incremental LTCG is ~3x faster. ’.

Introduces faster Whole Program Optimized builds (/ltcg:incremental)

Page 10: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Your code builds faster with 2015Incredibuild and Visual Studio

• Incredibuild is a software acceleration technology which accelerates Visual Studio, Continuous deliveryand development tool

• Incredibuild and Visual Studio partnership only in 2015 offers the following features as a part of the free SKU.

• A better granular build plan which breaks down false dependencies to maximize build parallelism

• Intelligent resource management

• Visualization tools to understand your build bottle-necks

All in all ~10% improvement in overall build time.

0.27222222222

2222 0.19583333333

3334

0.0326388888888889

Visual Studio IncrediBuild(Predicted)

IncrediBuild(With Helpers*)

• Helper machines are desktop machines containing 2-4 cores each

• Based on Ace open source benchmark

Page 11: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Your code builds faster with 2015Incredibuild and Visual Studio

“Acquire Incredibuild easily via the File->New, ‘Build Accelerator’ menu’”

Page 12: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Your code is faster and more secure with 2015

void blackscholes(float* input, int *signArray, int n) { for (int i = 0; i < n; i++) { float InputX = input[i]; int sign; if (InputX < 0.0f) { InputX = -InputX; sign = 1; } else { sign = 0; } input[i] = InputX; signArray[i] = sign; }}

mask = InputX < 0.0f ? 0xFFFFFFFF : 0;InputX = (mask & -InputX) | (~mask & InputX);sign = (mask & 1) | (~mask & 0);

Optimized to branch-less code

300%+ speedup in blackscholes benchmark

Vectorization of control-flow

Page 13: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Your code is faster and more secure with 2015Vectorization of control-flow

Bit-test merging

Page 14: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Your code is faster and more secure with 2015Vectorization of control-flow

Bit-test mergingLoop-if unswitching

for (int i = 0; i < 100; i++) if (some_invariant_condition) ...

Source code:

if (some_invariant_condition) for (int i = 0; i < 100; i++) ...

Optimized as if:

Page 15: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Your code is faster and more secure with 2015Vectorization of control-flow

Bit-test mergingLoop-if unswitchingOther code-generation improvements•Better vectorization of STL constructs (range based for-loops, std::vector)•Vectorization under /O1 (optimize for size)•Better codegen of std::min/std::max (200% improvement in runtime)•Arm32 performance improvements, aggressive scheduler pairing opt, EH optimizations, whole program type de-virtualization.•Improve Pre-exec optimizations.

Page 16: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Your code is faster and more secure with 2015/Guard:cf – new compiler switch• Protects your instruction stream

• At compile time analyzes control flow for all indirect targets and then inserts code to verify the targets at runtime.

Learn more about /Guard:cf

Page 17: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Your code is faster and more secure with 2015/Guard:cf – new compiler switchLearn more about /Guard:cf

Intel®Memory Protection Extensions (MPX) support Learn more about MPX

• New hardware instructions to help mitigate potential buffer overflows (statically and dynamically allocated buffers).

• Experimental compiler flag /d2MPX to enable automatic MPX code generation.

Intel MPX Enabling Guide

Page 18: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

6 reasons to move your C++ code to Visual Studio 2015#6 You will benefit from day one

Page 19: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Be more productive5#

Reasons to Move your C++ Code to Visual Studio6 201

5

Page 20: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Demo

Page 21: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

C++ Productivity in Visual Studio 2015RefactoringRename Symbol (Ctrl+R, Ctrl+R)Extract function (Ctrl+R, Ctrl+M) (experimental)Move definition (between header and source)

Convert to raw-string literals

Code generationCreate definition/declarationImplement pure virtuals

Quick FixesConvert dot to arrow (experimental)

Suggest missing #include (extension)

Fully qualified name/use namespace (extension)

IntellisenseSingle file browsing/IntelliSenseSimplified template deductionScale to even larger solutions

Page 22: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

C++ Productivity in Visual Studio 2015RefactoringRename Symbol (Ctrl+R, Ctrl+R)Extract function (Ctrl+R, Ctrl+M) (experimental)Move definition (between header and source)

Convert to raw-string literals

Code generationCreate definition/declarationImplement pure virtuals

Quick FixesConvert dot to arrow (experimental)

Suggest missing #include (extension)

Fully qualified name/use namespace (extension)

IntellisenseSingle file browsing/IntelliSenseSimplified template deductionScale to even larger solutions

std::string s = "\nSome reasons this string is hard to read:\n\t1. It would go off the screen in your editor\n\t2. It has sooooo many escape sequences.\n\nThey should make a type for this called \"long\" string, har har har.\n\nHave fun parsing this! (maybe\?)\n";

std::string s = R"(Some reasons this string is hard to read:

1. It would go off the screen in your editor2. It has sooooo many escape sequences.

They should make a type for this called "long" string, har har har.

Have fun parsing this! (maybe?))";

Page 23: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

C++ Productivity in Visual Studio 2015RefactoringRename Symbol (Ctrl+R, Ctrl+R)Extract function (Ctrl+R, Ctrl+M) (experimental)Move definition (between header and source)

Convert to raw-string literals

Code generationCreate definition/declarationImplement pure virtuals

Quick FixesConvert dot to arrow (experimental)

Suggest missing #include (extension)

Fully qualified name/use namespace (extension)

IntellisenseSingle file browsing/IntelliSenseSimplified template deductionScale to even larger solutions

Page 24: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

C++ Productivity in Visual Studio 2015RefactoringRename Symbol (Ctrl+R, Ctrl+R)Extract function (Ctrl+R, Ctrl+M) (experimental)Move definition (between header and source)

Convert to raw-string literals

Code generationCreate definition/declarationImplement pure virtuals

Quick FixesConvert dot to arrow (experimental)

Suggest missing #include (extension)

Fully qualified name/use namespace (extension)

IntellisenseSingle file browsing/IntelliSenseSimplified template deductionScale to even larger solutions

Page 25: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

6 reasons to move your C++ code to Visual Studio 2015#6 You will benefit from day one#5 You can be more productive

Page 26: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Debug like a pro4#

Reasons to Move your C++ Code to Visual Studio6 201

5

Page 27: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Demo

Page 28: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Debugging ImprovementsIntegrated Performance ToolsPerfTipsMemory ProfilerCPU Profiler

Edit and ContinueWorks with natvisx64 support

Natvis ImprovementsKeep natvis files with projectsSupported when debugging C++/CLI (experimental in Update 2)

Breakpoints UIAll settings in single dialogNon-modal

Exception SettingsOpens instantlyNon-modalFast search

Page 29: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

6 reasons to move your C++ code to Visual Studio 2015#6 You will benefit from day one#5 You can be more productive#4 You will debug like a pro

Page 30: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Write portable, modern C++

3#Reasons to Move your C++ Code to Visual Studio6 201

5

Page 31: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

C++ ConformanceC+ +

11C+ +

14C+ +

17

initializer_list

Non-static data member init

R-value references

Inheriting constructors

default/deleted func.

Inline namespaces

User-defined literals

noexcept

char16_t/char32_talignas/

alignof __func__ extended sizeof

Reference qualifiers

Unicode string literalsMagic

staticsthread_loc

alUnrestricted

unions Attributes Universal char names in literalsData-dep ordering

attributesconstexp

rExpression

SFINAETwo-phase

lookupauto, decltype(auto) return

typesGeneric lambdas

Generalized lambda captures

Digit separatorBinary

literalsSized

deallocatorsDeprecated

attributeVariable

templatesExtended constexprNSDMI for

aggregatesAuto with braced-init

listu8 char literal

Attribs on ns and enumcoroutine

s

typename in template template-param

modules concepts Nested namespace

Folded expressions

Updated from VS 2013Completed in VS 2015

Partial implementation in VS 2015Under consideration

Page 32: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

“Within C++ is a smaller, simpler, safer language struggling to get out.”

BJARNE STROUSTRUP

Page 33: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

C++ Core Guidelineshttps://github.com/isocpp/CppCoreGuidelines

Your code will be:• good modern C++,• simpler and safer,• which leads to less

resource leaks and logic errors

Page 34: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Need help adopting the C++ Core Guidelines?C++ Core CheckersBounds checksType checksLifetime checks (pre-release)

Install from:https://www.nuget.org/packages/Microsoft.CppCoreCheck

Source code:Coming soon!

Guidelines Support Libraryspan<T>string_spanowner<T>, and more

Install from:https://www.nuget.org/packages/Microsoft.Gsl/

Source code:https://github.com/Microsoft/GSL

Page 35: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

For example…Before With Core Checkers

Don't use pointer arithmetic. Use span instead. (bounds.1)

Variable 'n' is uninitialized. Always initialize an object. (type.5)

Don't use pointer arithmetic. Use span instead. (bounds.1)Don't use pointer arithmetic. Use span instead. (bounds.1)Don't use pointer arithmetic. Use span instead. (bounds.1)

C26481

C26494

C26481C26481C26481

1. void f(int* p, int count)2. {3. if (count < 2) return;4. int* q = p + 1; 5.  6. ptrdiff_t d;7. int n;8. d = (p - &n); 9.  10. p[4] = 1; 11. p[count - 1] = 2; 12. use(&p[0], 3); 13.}14. 15.std::unique_ptr<int[]> a16. (new int[10]);17.f(a.get(), 10);

Page 36: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

For example…

1. void f(int* p, int count)2. {3. if (count < 2) return;4. int* q = p + 1; 5.  6. ptrdiff_t d;7. int n;8. d = (p - &n); 9.  10. p[4] = 1; 11. p[count - 1] = 2; 12. use(&p[0], 3); 13.}14. 15.std::unique_ptr<int[]> a16. (new int[10]);17.f(a.get(), 10);

Before With Core Checkers

C26481

C26494

C26481C26481C26481

After (with GSL)

1. void f(gsl::span<int> a) 2. {3. if (a.length() < 2) return;4. gsl::span<int> q = a.subspan(1);5. [[suppress(type.5)]] {6. ptrdiff_t d;7. int n;8. d = (a.data() - &n); 9. }10. a[4] = 1;11. a[a.length() - 1] = 2;12. use(a.data(), 3); 13.}14. 15.std::unique_ptr<int[]> a16. (new int[10]);17.f({ a.get(), 10 });

(ptr, len) span

explicit opt-outs

Call site compat: add {}

checked access

checked access

Page 37: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

6 reasons to move your C++ code to Visual Studio 2015#6 You will benefit from day one#5 You can be more productive#4 You will debug like a pro#3 You can write portable, modern C++

Page 38: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Target Linux and Windows desktop

2#Reasons to Move your C++ Code to Visual Studio6 201

5

Page 39: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Demo

Page 40: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Linux development with Visual Studio (pre-release)Target Desktop, Server and IoT scenariosOut-of-the-box template for Raspbian based PiMinimal list of dependencies for target machine

openssh-server, g++, gdb and gdbserver

Edit, Remote Build and DebugSupports x86, x64 and ARM architecturesSupport for remote Linux builds incl. remote post-build eventsDebug and edit code within the familiarity of VS

Manage multiple remote Linux machinesSwitch between as many local VMs, remote machines and Azure VMs as you needDownload the extension today from Visual Studio Gallery!

Page 41: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

6 reasons to move your C++ code to Visual Studio 2015#6 You will benefit from day one#5 You can be more productive#4 You will debug like a pro#3 You can write portable, modern C++#2 You can target both Linux and Windows desktop

Page 42: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Target one mobile platform from one IDE

1#Reasons to Move your C++ Code to Visual Studio6 201

5

Page 43: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Target all mobile platforms from one IDE

1#Reasons to Move your C++ Code to Visual Studio6 201

5

Page 44: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Demo

Page 45: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Target all mobile platforms from one IDE! • One C++ IDE for your cross-platform needs

(Android, iOS, Windows and Linux)

• Share and reuse cross-platform code

• State of the Art code-editing features

• Powerful debugging experience

• Fast emulation

• Jump Start

Page 46: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Android DemoDescriptionBuild your android application with Gradle build system and easily reference otherandroid libraries.

Feature Capabilities• State of the art coding experience with Java and C++• Powerful debugging for your Java and C++ code• Gradle Build System• Ant Build System• Referencing Android libraries (.aar, .jar) easily in your Android Code.• Logcat integration• Fast emulation• Jump start development with templates and samples

Page 47: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

iOS DemoDescriptionEasily import your Xcode project into Visual Studio and get started with iOS development within Visual Studio from Windows.

Feature Capabilities• Import from Xcode, project wizard• Open in XCode

Page 48: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Clang with Microsoft codegen

Learn more about Clang with Microsoft Codegen

• A new Clang based toolset to build your cross-platform C++ code for Windows.

• Use Clang goodness (conformance, diagnostics)

• No longer do you need to use ‘#ifdef (specific_compiler_implementation)’File-> New-> Cross Platform->

Page 49: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

6 reasons to move your C++ code to Visual Studio 2015#6 You will benefit from day one#5 You can be more productive#4 You will debug like a pro#3 You can write portable, modern C++#2 You can target both Linux and Windows desktop#1 You can target all mobile platforms from one IDE

Page 50: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

You helped build it!0#

Reasons to Move your C++ Code to Visual Studio6 201

5

Page 51: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Listening in…User Voicehttp://visualstudio.uservoice.com

Connecthttp://connect.microsoft.com

Send-a-smile“Report a problem”

Forumshttps://social.msdn.microsoft.com/Forums/en-US/home?forum=vcgeneral

For more info: https://blogs.msdn.microsoft.com/visualstudio/2015/07/30/visual-studio-customer-feedback-channels/

Page 52: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

C++ User Voice in Visual Studio 2015Status User Voice

COMPLETED Include gamma functions in math.h COMPLETED Single file IntelliSenseCOMPLETED Separate ship line of Visual C++ compiler from Visual Studio IDECOMPLETED Make C/C++ compiler (cl.exe) independent of IDECOMPLETED Decouple C++ compiler releases from Visual Studio releasesCOMPLETED Automate the installation of boostCOMPLETED Fix IntelliSense performanceCOMPLETED Working Intellisense in C++COMPLETED the IntelliSense is slow when "Parsing files in solution" in VS 2015, please speed it upCOMPLETED C++ has the same templates as Visual Basic and C#COMPLETED Add options to turn off parts of IntelliSenseCOMPLETED Bring Visual C++ up to par with open source programs such as Eclipse and NetbeansCOMPLETED One tab for .cpp and .h filesCOMPLETED One-button switch between header and implementation fileCOMPLETED C++ Edit and Continue in the new debug engineCOMPLETED x64 Edit and Continue for C++COMPLETED Improve MFCCOMPLETED Add support for binary literals in C++COMPLETED Provide refactoring for C++COMPLETED Support C++11 featuresCOMPLETED Multithreaded C/C++ linkerCOMPLETED Do not treat IntelliSense output as errors in Error ListCOMPLETED Improve C++ intellisense for pointers

IN PROGRESS Support natvis debug visualizers in Mixed mode debugging

11,300

votes

Page 53: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

C++ Connect Bugs in Visual Studio 2015

1,685fixed bugs

Top 10 contributorsDavid Majnemer (33)

Bruce Dawson2 (26)

Marcel Raad (23)

Michael Winterberg (18)

Debugini (17)

Kaba_ (15)

bogdan I (12)

Fred J. Tydeman (12)

Trass3r (11)

Niels Dekker (11)

Page 54: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

7 reasons to move your C++ code to Visual Studio 2015#6 You will benefit from day one#5 You can be more productive#4 You will debug like a pro#3 You can write portable, modern C++#2 You can target both Linux and Windows desktop#1 You can target all mobile platforms from one IDE

#0 You helped build it!

Reasons to Move your C++ Code to Visual Studio6 201

5

Page 55: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Migrate Today!

Page 56: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

The Upgrade PromiseVS’15’ toolset will be highly compatible* with the VS 2015 toolsetYou can upgrade today to VS 2015 and have zero friction upgrading to VS’15’ later*) compiler version = 19.00.*, VC Redist *140.dll = same as VS 2015

1

2 Sign-up for the free VS 2015 C++ Migration Virtual Dev LabThis is an opportunity to get help port existing C++ code to Visual Studio 2015Members of our team in Redmond will be available for 1:1 interactions to work through any migration issues you unexpectedly run intoLimited availability Sign up today at http://aka.ms/VDevLabs2015

Page 57: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

We recommend at //BUILD/3/30 2PM Marriott Salon 9 “The Future of Visual Studio” – Amanda Silver3/30 3:30PM Marriott Salon 6“Best of Visual Studio Code: Trips and Tricks” - Wade Anderson3/31 11:45AM Marriott Salon 7 “What’s new in Visual Studio for Universal Windows app development” - Navit Saxena 3/31 11:55AM Main Theater “Cross-platform at Microsoft: Xamarin, Cordova, Unity and C++ Panel”

3/31 6:30PM Marriott Salon 7 “Become a Visual Studio 2015 Power User” - Allison Buchholtz-Au, Andrew Hall4/1 10:30AM Marriott Salon 8 “Building Desktop apps in Visual Studio ’15’” - Unni Ravindranathan 4/1 2:40PM Empowering Business Theater“Evolving the Installation of Visual C++ IDE and Tools” – Marian Luparu

Page 58: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

Please Complete An Evaluation FormYour input is important!

or

Page 59: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

• Re-visit Build on Channel 9.• Continue your education at

Microsoft Virtual Academy online.

Call to Action

Page 60: Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015

© 2016 Microsoft Corporation. All rights reserved.