Visual Studio IDE

Announcement: Last fall, we migrated this forum to Visual Studio Developer Community to provide you one convenient and responsive system for all feedback. As the final step in the migration, this forum will be closed off completely on June 1st, 2019. We encourage you to visit Visual Studio Developer Community where you can now suggest new ideas, browse and vote on existing ideas, and engage with Visual Studio teams.

We’d like your suggestions and ideas to help us continuously improve future releases of Visual Studio, so we’ve partnered with UserVoice, a third-party service, to collect your feedback. Please do not send any novel or patentable ideas, copyrighted materials, samples or demos for which you do not want to grant a license to Microsoft.

This site is for feature suggestions; if you need to file a bug, you can visit our Developer Community website to get started.

Note: your use of the portal and your submission is subject to the UserVoice Terms of Service & Privacy Policy and license terms.

We look forward to hearing from you!
- The Visual Studio Team

I suggest you ...

You've used all your votes and won't be able to post a new idea, but you can still search and comment on existing ideas.

There are two ways to get more votes:

  • When an admin closes an idea you've voted on, you'll get your votes back from that idea.
  • You can remove your votes from an open idea you support.
  • To see ideas you have already voted on, select the "My feedback" filter and select "My open ideas".
(thinking…)

Enter your idea and we'll search to see if someone has already suggested it.

If a similar idea already exists, you can support and comment on it.

If it doesn't exist, you can post your idea so others can support it.

Enter your idea and we'll search to see if someone has already suggested it.

  • Hot ideas
  • Top ideas
  • New ideas
  • My feedback
  1. Add something similar to __builtin_expect() from gcc (LIKELY(), UNLIKELY())

    Maaaaaaany notable codebases (eg. node.js, nginx, perl, python) are making use of LIKELY() and UNLIKELY() macros implemented with __builtin_expect(). It's the simplest and the most reasonable way to assist compiler with branch prediction. It is supported both by clang and gcc, but not by MSVC.

    I'm aware of PGO, but it's awkward to use and you can't except cross-platform open-source projects to start using it.

    Please add something similar to Visual C++ compiler. Maaaany projects would benefit from that, and it doesn't seem to be that hard to implement since you already have PGO and __assume.

    44 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    1 comment  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  2. Support inlining for functions returning unwindable objects

    Within deeply-templated codes, it seems quite common to call a function which simply forwards the arguments into another function, which again just forwards the arguments into another function, which again just do forwarding, and so on. As I know, current version of Visual C++ is not able to inline such a function if it returns an object with non-trivial destructor, whenever exceptions are enabled. This often makes a performance hit particularly when the level of forwarding is unavoidably deep and there are many arguments with not-so-small sizes. I very much hoped if the upcoming Visual C++ 2017 has solved this…

    40 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    2 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  3. Consider changing the behavior of the "create definition/declaration" menu option.

    This suggestion is migrated to Developer Community. Please use below link to view the current status.
    https://developercommunity.visualstudio.com/content/idea/351424/consider-changing-the-behavior-of-the-create-defin.html
    In Visual Studio 2015, Microsoft added the not so little light bulb that comes up every once and a while with suggestions. I would you the team to reconsider changing the behavior of the "create definition" so instead of opening this annoying inline editor at the bottom, it takes you directly to the source file. All the c++ productivity tools override this native behavior because it is so terrible and annoying.

    43 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    3 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  4. Automatically insert parenthesis for function/method calls in C++

    If I want to call a function/method in C++ my normal way is to type the first letters of the name and investigate the IntelliSense suggestions. If I choose one, the name will be inserted, but it would be great if also the parenthesis (and maybe the conluding semicolon) could be inserted.
    Of course the caret should be placed in the middle of the new parenthesis.

    So for example if I type
    std::string s;
    s.em
    the result after the use of IntelliSense should be
    std::string s;
    s.empty(_CARET_);

    39 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    3 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  5. Improve compile/link time with C++11 modules

    This suggestion is migrated to Developer Community. Please use below link to view the current status.
    https://developercommunity.visualstudio.com/content/idea/351074/improve-compilelink-time-with-c11-modules.html
    Clang already supports modules, this reduces the algorithmic complexity of the build while maintaining backwards compatibility.

    This could take a 60mins build down to 10mins.

    39 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    3 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  6. automatically generate precompiled headers

    Hi, i noticed a project made by an intern at microsoft which can automatically generate precompiled headers for a project. according to Andrew Pardoe it got removed, because of too many issues. See: https://channel9.msdn.com/Shows/C9-GoingNative/GoingNative-35-Fast-Tips-for-Faster-Builds#time=13m03s

    If think the tool mentioned in the above demo has almost all the perks required for such a tool. It can dramatically speed up compile times (which i already noticed when adding them manually). Even if it is not 100% perfect you can easily use it as a base to improve upon.

    36 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    1 comment  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  7. Keep C++ AMP supported and improved.

    Please keep supporting and improving C++ AMP. It is still unique among all other solutions.

    33 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    3 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  8. Shut up about "C++ Intellisense information may be out of date, generate CMake cache to refresh"

    The highlighted yellow bar is distracting me. I don't need the Intellisense, but I really want to dismiss that line, clicking Generate doesn't help because there are some errors that I don't care, and clicking settings to ask it never generate doesn't work out either.

    32 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    2 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  9. Support for operator -> in the debugger (C++)

    Working with smart pointer classes in the debugger can be painful. For example, the following won't work:

    m_item->m_name

    It would be nice if there was a natvis feature that would enable this. Maybe it would look something like this:

    <Type Name="std::unique_ptr&lt;*&gt;">
    <Methods>
    <Item Name="operator-&gt;">m_pointer</FunctionItem>
    </Methods>
    </Type>

    32 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    1 comment  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  10. support stdatomic.h in C, for both c1 and clang (clang get Unexpected atomic instruction -- use Windows interlock intrinsics)

    support stdatomic.h in C, for both c1 and clang (clang get Unexpected atomic instruction -- use Windows interlock intrinsics)

    32 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  11. to rewrite VS and Windows SDK header files appropriately so they don't produce humongous amount of warnings during compilation with /Wall

    Whoever is responsible for writing, modifying VS and Windows SDK header files should make appropriate corrections in the code they contain so the header files adhere to good coding practices and therefore compile smoothly. The number of warnings these header files produce during compilation is extremely alarming and it explicitly forces user-code to be clumsy-written. When would we, the users, finally be able to write warning-free code as good coding-practices suggest in about every C++ programming course book on the market? What we have now just doesn't make any sense. Please correct this hideousness and embarrassment ASAP. Thanks.

    30 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    2 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  12. Add C/C++ #warning preprocessor directive

    The other major compilers have long supported #warning. It is really irritating that VC++ doesn't support #warning.

    This has been previously suggested, but now is a good time to reconsider since the VC++ team is currently working on upgrading preprocessor support.

    30 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  13. 29 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  14. Produce a warning on deprecated special member generation

    Since C++11 several compiler-generated special members are deprecated.

    This includes the copy constructor and copy assignment operators if either one is defined without the other, or if the destructor is defined.

    Currently MSVC does not produce any diagnostic when this happens.

    Example code that should produce warning:

    struct rule_of_three_violation {
    int* ptr;
    rule_of_three_violation(int value) : ptr(new int(value)) {}
    ~rule_of_three_violation() { delete ptr; }
    };

    29 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    1 comment  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  15. Support for namespaces in Visual C++ projects

    The namespaces were introduced to C++ in 1995 (http://www.cpp-home.com/tutorials/300_1.htm) - 20 years ago, but the IDE just has no support of them. What I am asking for is:

    - Add a setting called "Default namespace" to the project setting. This should be defaulted to the project's name or empty - maybe a global settings applied to new projects?
    - Add a "Namespace" to a new class dialog (in project's context menu Add->New Item->C++ class). The generated class should be enclosed in the namespace. As Visual C++ 2015 doesn't support Nested namespace definitions (http://blogs.msdn.com/b/vcblog/archive/2014/11/17/c-11-14-17-features-in-vs-2015-preview.aspx), settings like NS1::NS2…

    28 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  16. C++ IntelliSense should hide privately inherited members

    IntelliSense already hides private members that are inaccessible, but it still shows public members that have been privately inherited. Example:

    struct A {
    int x;
    };

    class B : private A {
    int y;
    };

    B foo;

    When you type "foo.", IntelliSense suggests "x", even though it is not accessible

    28 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    4 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  17. MSVC team: Do the same stunt as what the .NET team has done with Roslyn and rewrite your compiler.

    Use C++. Use an AST. Make a public API to use that AST, among other compiler capabilities. OPEN SOURCE IT!

    - Rewrite because we feel that you can't do much with all the legacy cruft in your current codebase.
    - Use C++ because current codebase is has lots of stuff written in C. *It's a C++ compiler after all.*
    - Create public API. CaaS or something. Like Roslyn. Like clang, LLVM. Even GCC seems to up their efforts in this area. You don't even need to outsource C++ Intellisense to some other company!
    - Open source because there's really no…

    28 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    2 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  18. Intrinsics for Integer Overflow detection in C++

    Other compiler (GCC and Clang) provides several builtins to detect overflow on arithmetic operations with integers. It is hard to detect overflow manually in certain situations and in every situation the compiler can do greater job. In most cases it is just a matter of checking overflow flag. Other languages than C++ provide such utility by default. For example in C# we are able to use checked/unchecked contexts.

    See __builtin_{add|sub|mul}_overflow documentation https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html .

    28 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    1 comment  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  19. Continue development and standardization of C++/CLI

    C++/CLI is an awesome, powerful and unique language/dialect, and C++/CLI programmers have great advantages of using exceptional and empowering features of this language. It lets you write native/.NET code more efficiently (direct working with boxed values, for example). Also, it can perfectly interoperate with other .NET languages, so it's a bridge between worlds. In addition, it was standardized by Ecma International, which I guess is also a great advantage. It was intended that C++/CLI would continue being developed and future standards would be created.
    Herb Sutter in his paper "A Design Rationale for C++/CLI" described some possible future unifications and…

    27 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    2 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →
  20. Release more CRT sources

    As mentioned before (https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/2940069-release-more-crt-source-header-files-and-code), we *really* need to be able to step around the CRT to efficiently debug. It seems you essentially agree as you do release many (most?) of the CRT source, but too much was left unreleased.
    I think the ucrt\src\appcrt\ subtree is at least one major source of missing releases.

    27 votes
    Vote
    Sign in
    (thinking…)
    Sign in with: facebook google
    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Languages - C++  ·  Flag idea as inappropriate…  ·  Admin →

Feedback and Knowledge Base