Sind Clang und MSVC zu freizügig, wenn ich hier int anstelle von std::size_t als Vorlagenparameter verwende? [Duplikat]C++

Programme in C++. Entwicklerforum
Anonymous
 Sind Clang und MSVC zu freizügig, wenn ich hier int anstelle von std::size_t als Vorlagenparameter verwende? [Duplikat]

Post by Anonymous »

Das Folgende wird auf MSVC und Clang kompiliert, aber nicht auf GCC:

Code: Select all

#include 
#include 

template 
struct IsSTDArray : std::false_type {};

template 
struct IsSTDArray : std::true_type {};

int main() {

static_assert(IsSTDArray::value);
}
Link hier
Ich gehe davon aus, dass GCC „technisch“ korrekt ist, oder?
Allerdings in meiner Template-Klasse:

Code: Select all

template 
struct MyClass {};

MyClass my_class; // THIS WORKS
Aber nicht im ersten Beispiel, das ich gegeben habe, das ist strenger.
Interessanterweise können GCC und Clang keine vorzeichenlosen und vorzeichenbehafteten Nichtübereinstimmungen kompilieren (aber akzeptieren ganzzahlige Breitenunterschiede), aber MSVC akzeptiert sogar vorzeichenbehaftete und vorzeichenlose Nichtübereinstimmungen, daher denke ich, dass die Regeln in Bezug auf jeden Compiler völlig unterschiedlich sind.

Code: Select all

template 
struct MyClass {};

MyClass my_class; // THIS WORKS ON MSVC BUT NOT ON CLANG AND GCC

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post