#include“ <>”和#include <“”>是否包含有效的文件?

这很挑剔,可能没有任何实际用途。我只是好奇...

在C ++ 20工作草案(n4861)中,标头名称定义为:

(5.8)
header-name:
    < h-char-sequence >
    " q-char-sequence "
h-char-sequence :
    h-char
    h-char-sequence h-char
h-char:
    any member of the source character set except new-line and >
q-char-sequence :
    q-char
    q-char-sequence q-char
q-char:
    any member of the source character set except new-line and "

其中“源字符集”定义为:

(5.3.1) The basic source character set consists of 96 characters: the space character, the control characters representing
horizontal tab, vertical tab, form feed, and new-line, plus the following 91 graphical characters:9
  a b c d e f g h i j k l m n o p q r s t u v w x y z
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  0 1 2 3 4 5 6 7 8 9
  _ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ " ’

和源文件包含被定义为:

(15.3.2) A preprocessing directive of the form
    # include < h-char-sequence > new-line
    ...

(15.3.3) A preprocessing directive of the form
    # include " q-char-sequence " new-line
    ...

As I understand it, this means that the both include directives #include " <> " and #include < "" > are perfectly valid, one following the h-char-sequence, the other following the q-char-sequence.

This however seems rather strange and bizarre to me. I tried creating a header file named <> in visual studio which (IMHO kind of sanely) forbid this, informing me that no such header file may be created as both chars < and > are forbidden.

Strictly speaking, is visual studio following the Standard in this regard or am I overlooking something? Are both header names valid or invalid? If invalid, which section of the standard forbids this? Also, as the definitions of source file inclusions contain a space, is #include <iostream> even valid?